Ich habe die folgende Befehlsdefinition (es ist ein Eintrag einer Eintragsliste), die gut funktioniert:
\newcommand{\entry}[4]{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\\#4%
}\\}
Jetzt habe ich einen Testfall, bei dem der 4. Parameter leer sein kann. In diesem Fall möchte ich die davor definierte neue Zeile nicht anzeigen. Ich habe den folgenden Ansatz ausprobiert:
\newcommand{\entry}[4]{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\ifthenelse{\isempty{#4}}{}{\\#4}%
}\\}
aber es gibt mir einen Fehler:
Undefined control sequence. ^^I{test test2}
Missing number, treated as zero. ^^I{test test2}
Missing = inserted for \ifnum. ^^I{test test2}
Missing number, treated as zero. ^^I{test test2}
Kannst du bitte helfen?
Antwort1
Das Problem scheint in den Kommentaren gelöst worden zu sein, aber ich möchte zwei verschiedene Ansätze vorschlagen.
Erstens \newcommand
erleichtert es die Definition von Befehlen mit einem optionalen Argument, vorausgesetzt, es ist das erste Argument. Mit dieser Funktion können Sie Ihr Makro wie folgt umschreiben:
\newcommand{\entry}[4][]{%
#2&\parbox[t]{11.2cm}{%
#3%
\hfill%
#4%
\if\relax\detokenize{#1}\relax\else\\#1\fi
}\\}
Das []
besagt, dass es standardmäßig #1
leer ist. Dieses Makro ist im Wesentlichen dasselbe wie Ihres, außer dass ich die Parameternummern permutiert habe. Der Hauptunterschied besteht in der Art und Weise, wie Sie das Makro verwenden:
\entry{second}{third}{fourth}
ohne den optionalen Parameter oder, wenn Sie den optionalen Parameter angeben möchten:
\entry[first]{second}{third}{fourth}
Die zweite Alternative besteht in der Verwendung \NewDocumentCommand
vonxparsePaket. Der Vorteil von \NewDocumentCommand
ist, dass Sie das optionale Argument überall einfügen können, wo Sie es möchten, auch am Ende:
\NewDocumentCommand{\entry}{ mmmo }{%
#1&\parbox[t]{11.2cm}{%
#2%
\hfill%
#3%
\IfNoValueF{#4}{\\#4}% print #4 when it is given
}\\}
Das mmmo
sagt, dass es dreiMzusätzliche Argumente und eineÖoptionales Argument. Auch hier liegt der einzige wirkliche Unterschied zu Ihrem Code in der Art und Weise, wie das Makro verwendet wird:
\entry{first}{second}{third}% without optional argument
\entry{first}{second}{third}[fourth]% with optional argument