Warum fügt dieses Makro ein Tabellenelement in die falsche Zeile ein?

Warum fügt dieses Makro ein Tabellenelement in die falsche Zeile ein?

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 4Einfü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, tabularaber 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 4wird für die nächste Tabellenzeile eingelesen.

Deutlich zu erkennen ist der Spaltenwechsel bei der „falschen“ Verwendung, 3die 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}

Bildbeschreibung hier eingeben

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}

Bildbeschreibung hier eingeben

verwandte Informationen