
Рассмотрим следующий 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}