Betrachten Sie das folgende MWE:
\documentclass[a4paper,10pt]{article}
\newcommand{\macro}[2][]{%
& something & #2 & #1 \\
}
\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}
\end{tabular}
\end{document}
Die Ausgabe lautet etwa:
something 3
4
Warum steht das 4
Einfügen am Anfang einer neuen Zeile und nicht am Ende der vorherigen Zeile? Wie kann ich das beheben?
Ich habe bereits gesehen, dass \\
es funktioniert, wenn man es in die Tabelle anstelle des Makros einfügt:
\documentclass[a4paper,10pt]{article}
\newcommand{\macro}[2][]{%
& something & #2 & #1
}
\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}\\
\end{tabular}
\end{document}
Das ist jedoch nicht das, was ich will. Ich definiere eine neue Umgebung, die im Hintergrund verwendet wird, tabular
aber ich möchte nicht, dass ihre Schnittstelle vom Einfügen abhängt , //
und &
ich möchte sie ausdrücklich in Makros verbergen.
Antwort1
Das Makro \macro
(sic!) ist so definiert, dass es ein optionales Argument hat. Fehlt dieses, \macro{3}{4}
ist der Aufruf identisch \macro[]{3}
und die Zahl 4
wird für die nächste Tabellenzeile eingelesen.
Deutlich zu erkennen ist der Spaltenwechsel bei der „falschen“ Verwendung, 3
die sich z.B. in der 4. Spalte, statt in der geforderten 3. Spalte befindet.
\documentclass[a4paper,10pt]{article}
\newcommand{\macro}[2][]{%
& something & #2 & #1 \\
}
\begin{document}
Does not work
\begin{tabular}{lccc}
\macro{3}{4}
\end{tabular}
Works
\begin{tabular}{lccc}
\macro[3]{4}
\end{tabular}
\end{document}
Antwort2
Wenn Sie das Makro ohne das optionale Argument möchten:
\documentclass[a4paper,10pt]{article}
\newcommand{\macro}[2]{% notice the lack of the second brackets here
& something & #2 & #1 \\
}
\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}
\end{tabular}
\end{document}