Hulp bij schrijven macrocode met voorwaarden over de parameters
"Bas Dekker (TeXniek)" <[email protected]> Sun, 10 Dec 2017 12:46:05 +0100
| Newsgroups | gmane.comp.tex.dutch |
|---|---|
| Message-ID | <[email protected]> |
--===============8670033260620878028==
Content-Type: multipart/alternative; boundary="Apple-Mail=_A9C84B66-166B-41C6-BEC4-0A2A5B2D47C6"
--Apple-Mail=_A9C84B66-166B-41C6-BEC4-0A2A5B2D47C6
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
charset=us-ascii
Dag allemaal,=20
Ik loop vast op het schrijven van een macro in een class.=20
Het gaat om het volgende: ik wil een environment met twee argumenten. =
Het eerste is een plaatjesnaam is een breedte.
Alsik een plaatje heb, dan wil ik een minipage met een plaatje, en =
rechts daarvan een opsomming items. Als ik niets heb, dan wil ik een =
opsomming op de hele breedte. De verhouding tussen plaatje en tekst is =
default 1/4 versus 3/4. Heb ik iets in het tweede argument, dan is dat =
de breedte van de minipage van het plaatje, en ik pas de breedtes aan. =
Ik hou rekening met 5% marge.
Dit is mijn code :
\newenvironment{cbkingredients}[2]{%
\def\lingr{.25}%
\def\ringr{.70}%
\ifthenelse{\equal{#2}{}}{}{%
\def\lingr{##2}%
\def\ringr{.95 - ##2}}%
\ifthenelse{\equal{#1}{}}{}{%
\begin{minipage}[t]{\lingr\textwidth}%
\includegraphics[width=3D.95*\lingr \textwidth]{#1}%
\end{minipage}
\begin{minipage}[t]{\ringr\textwidth}%
}%
\begin{itemize}
}{%
\end{itemize}%
\ifthenelse{\equal{#1}{}}{}{\end{minipage}}%
}
(ik laad hoger in de source het calc package, zodat ik * kan gebriuken =
om lengtes te vermenigvuldigen)
Ik heb goed begrepen dat ik bij macro's binnen macro's (dus bij \def) de =
argument van een dubbele pound-sign moet voorzien (waarom? En heb ik het =
goed gelezen?)
Maar als ik XeLaTeX run, op, bijvoorbeeld:
\begin{cbkingredients}{img/nutmeg.jpg}{.2}
\item Nutmeg
\item Milk
\end{cbkingredients}
dan krijg ik "Illegal parameter number in definition of =
\endcbkingredients".=20
Ik heb van alles geprobeerd, maar de boodschap blijft komen.=20
Weten jullie wat ik fout doe?
Bedankt alvast!
Bas Dekker=20
(sub-account voor TeXniek)
Postbus 11088
1001 GB Amsterdam
+31 (0)6 25 00 32 78
[email protected]
--Apple-Mail=_A9C84B66-166B-41C6-BEC4-0A2A5B2D47C6
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
charset=us-ascii
<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html =
charset=3Dus-ascii"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; -webkit-line-break: =
after-white-space;"><div><br></div><div><br></div><div>Dag =
allemaal, </div><div><br></div><div><br></div><div>Ik loop vast op =
het schrijven van een macro in een =
class. </div><div><br></div><div>Het gaat om het volgende: ik wil =
een environment met twee argumenten. Het eerste is een plaatjesnaam is =
een breedte.</div><div><br></div><div>Alsik een plaatje heb, dan wil ik =
een minipage met een plaatje, en rechts daarvan een opsomming items. Als =
ik niets heb, dan wil ik een opsomming op de hele breedte. De verhouding =
tussen plaatje en tekst is default 1/4 versus 3/4. Heb ik iets in het =
tweede argument, dan is dat de breedte van de minipage van het plaatje, =
en ik pas de breedtes aan. Ik hou rekening met 5% =
marge.</div><div><br></div><div>Dit is mijn code =
:</div><div><br></div><div><div><font =
face=3D"Courier">\newenvironment{cbkingredients}[2]{%</font></div><div><fo=
nt face=3D"Courier">\def\lingr{.25}%</font></div><div><font =
face=3D"Courier">\def\ringr{.70}%</font></div><div><font =
face=3D"Courier">\ifthenelse{\equal{#2}{}}{}{%</font></div><div><font =
face=3D"Courier">\def\lingr{##2}%</font></div><div><font =
face=3D"Courier">\def\ringr{.95 - ##2}}%</font></div><div><font =
face=3D"Courier">\ifthenelse{\equal{#1}{}}{}{%</font></div><div><font =
face=3D"Courier">\begin{minipage}[t]{\lingr\textwidth}%</font></div><div><=
font face=3D"Courier">\includegraphics[width=3D.95*\lingr =
\textwidth]{#1}%</font></div><div><font =
face=3D"Courier">\end{minipage}</font></div><div><font =
face=3D"Courier">\begin{minipage}[t]{\ringr\textwidth}%</font></div><div><=
font face=3D"Courier">}%</font></div><div><font =
face=3D"Courier">\begin{itemize}</font></div><div><font =
face=3D"Courier">}{%</font></div><div><font =
face=3D"Courier">\end{itemize}%</font></div><div><font =
face=3D"Courier">\ifthenelse{\equal{#1}{}}{}{\end{minipage}}%</font></div>=
<div><font face=3D"Courier">}</font></div></div><div><br></div><div>(ik =
laad hoger in de source het calc package, zodat ik * kan gebriuken om =
lengtes te vermenigvuldigen)</div><div><br></div><div>Ik heb goed =
begrepen dat ik bij macro's binnen macro's (dus bij \def) de argument =
van een dubbele pound-sign moet voorzien (waarom? En heb ik het goed =
gelezen?)</div><div><br></div><div><br></div><div><br></div><div>Maar =
als ik XeLaTeX run, op, =
bijvoorbeeld:</div><div><br></div><div><div><font =
face=3D"Courier">\begin{cbkingredients}{img/nutmeg.jpg}{.2}</font></div><d=
iv><font face=3D"Courier">\item Nutmeg</font></div><div><font =
face=3D"Courier">\item Milk</font></div><div><font =
face=3D"Courier">\end{cbkingredients}</font></div></div><div><br></div><di=
v><br></div><div>dan krijg ik "<font face=3D"Courier">Illegal parameter =
number in definition of =
\endcbkingredients</font>". </div><div><br></div><div>Ik heb van =
alles geprobeerd, maar de boodschap blijft =
komen. </div><div><br></div><div>Weten jullie wat ik fout =
doe?</div><div><br></div><div>Bedankt =
alvast!</div><div><br></div><div><br></div><div><br></div><div><br></div><=
br><div apple-content-edited=3D"true">
<span class=3D"Apple-style-span" style=3D"border-collapse: separate; =
border-spacing: 0px;"><span class=3D"Apple-style-span" =
style=3D"border-collapse: separate; color: rgb(0, 0, 0); font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant: normal; =
font-weight: normal; letter-spacing: normal; line-height: normal; =
orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; =
widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; =
-webkit-border-vertical-spacing: 0px; =
-webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: =
auto; -webkit-text-stroke-width: 0px; "><div style=3D"word-wrap: =
break-word; -webkit-nbsp-mode: space; -webkit-line-break: =
after-white-space; "><span class=3D"Apple-style-span" =
style=3D"border-collapse: separate; color: rgb(0, 0, 0); font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant: normal; =
font-weight: normal; letter-spacing: normal; line-height: normal; =
orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; =
widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; =
-webkit-border-vertical-spacing: 0px; =
-webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: =
auto; -webkit-text-stroke-width: 0px; "><div style=3D"word-wrap: =
break-word; -webkit-nbsp-mode: space; -webkit-line-break: =
after-white-space; "><span class=3D"Apple-style-span" =
style=3D"border-collapse: separate; color: rgb(0, 0, 0); font-family: =
Helvetica; font-size: 12px; font-style: normal; font-variant: normal; =
font-weight: normal; letter-spacing: normal; line-height: normal; =
orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; =
widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; =
-webkit-border-vertical-spacing: 0px; =
-webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: =
auto; -webkit-text-stroke-width: 0px; "><div><div><b><br =
class=3D"Apple-interchange-newline"><font class=3D"Apple-style-span" =
face=3D"Helvetica-Bold">Bas Dekker </font></b></div><div><font =
class=3D"Apple-style-span" face=3D"Helvetica-Bold" size=3D"2"><span =
class=3D"Apple-style-span" style=3D"font-size: 10px; "><b>(sub-account =
voor TeXniek)</b></span></font></div><div><br =
class=3D"webkit-block-placeholder"></div><div><span =
class=3D"Apple-style-span" style=3D"font-size: small; ">Postbus =
11088</span></div><div><span class=3D"Apple-style-span" =
style=3D"font-size: small; ">1001 GB Amsterdam</span></div><div><font =
class=3D"Apple-style-span" size=3D"2"><br =
class=3D"webkit-block-placeholder"></font></div><div><font =
class=3D"Apple-style-span" size=3D"2">+31 (0)6 25 00 32 =
78</font></div><div><font class=3D"Apple-style-span" size=3D"2"><br =
class=3D"webkit-block-placeholder"></font></div><div><font =
class=3D"Apple-style-span" size=3D"2"><span class=3D"Apple-style-span" =
style=3D"font-size: 10px; "><a =
href=3D"mailto:[email protected]">[email protected]</a></span></font><=
/div><div><br =
class=3D"webkit-block-placeholder"></div></div><div><br></div><div><br =
class=3D"webkit-block-placeholder"></div></span><br =
class=3D"Apple-interchange-newline"></div></span><br =
class=3D"Apple-interchange-newline"></div></span><br =
class=3D"Apple-interchange-newline"></span><br =
class=3D"Apple-interchange-newline">
</div>
<br></body></html>=
--Apple-Mail=_A9C84B66-166B-41C6-BEC4-0A2A5B2D47C6--
--===============8670033260620878028==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KVGVYLU5MIG1h
aWxpbmcgbGlzdApUZVgtTkxAbnRnLm5sCmh0dHBzOi8vbWFpbG1hbi5udGcubmwvbWFpbG1hbi9s
aXN0aW5mby90ZXgtbmwK
--===============8670033260620878028==--