Por que esta macro está colocando um elemento de uma tabela na linha errada?

Por que esta macro está colocando um elemento de uma tabela na linha errada?

Considere o seguinte MWE:

\documentclass[a4paper,10pt]{article}

\newcommand{\macro}[2][]{%
    & something & #2 & #1 \\
}

\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}
\end{tabular}

\end{document}

A saída que ele produz é algo como:

    something    3
4

Por que colocar está 4no início de uma nova linha em vez de no final da linha anterior? Como posso consertar isso?

Já vi que colocar \\dentro do tabular ao invés da macro faz as coisas funcionarem:

\documentclass[a4paper,10pt]{article}

\newcommand{\macro}[2][]{%
    & something & #2 & #1
}

\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}\\
\end{tabular}

\end{document}

No entanto, não é isso que eu quero. Estou definindo um novo ambiente que usa nos bastidores, tabularmas não quero que sua interface dependa de colocação //e &explicitamente, quero-os escondidos dentro de macros.

Responder1

A macro \macro(sic!) é definida para ter um argumento opcional. Caso falte, a chamada \macro{3}{4}é a mesma \macro[]{3}e a figura 4será lida para a próxima linha tabular.

A mudança de coluna no uso “errado” é claramente visível. 3está na 4ª coluna, em vez da 3ª coluna solicitada.

\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}

insira a descrição da imagem aqui

Responder2

Se você quiser a macro sem o argumento opcional:

\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}

insira a descrição da imagem aqui

informação relacionada