Почему этот макрос помещает элемент таблицы в неправильную строку?

Почему этот макрос помещает элемент таблицы в неправильную строку?

Рассмотрим следующий MWE:

\documentclass[a4paper,10pt]{article}

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

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

\end{document}

Результат его работы выглядит примерно так:

    something    3
4

Почему put находится 4в начале новой строки, а не в конце предыдущей? Как это исправить?

Я уже видел, что размещение \\внутри таблицы вместо макроса заставляет все работать:

\documentclass[a4paper,10pt]{article}

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

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

\end{document}

Однако это не то, что я хочу. Я определяю новую среду, которая под капотом использует, tabularно я не хочу, чтобы ее интерфейс зависел от размещения //и &явно, я хочу, чтобы они были скрыты внутри макросов.

решение1

Макрос \macro(sic!) определен как имеющий необязательный аргумент. Если он отсутствует, вызов \macro{3}{4}будет таким же, как \macro[]{3}и и цифра 4будет прочитана для следующей табличной строки.

Сдвиг столбцов при «неправильном» использовании отчетливо виден. 3находится в 4-м столбце вместо требуемого 3-го столбца.

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

введите описание изображения здесь

решение2

Если вам нужен макрос без необязательного аргумента:

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

введите описание изображения здесь

Связанный контент