Проблема с расширением \@ifnextchar внутри табличной среды

Проблема с расширением \@ifnextchar внутри табличной среды

Я хотел бы определить макрос, который расширяется в табличную среду \hlineи \clineвнутри нее в зависимости от следующего символа:

\documentclass{standalone}           

\makeatletter
\def\mycline[#1]{\cline{#1}}
\def\myline{\@ifnextchar[{\mycline}{\hline}}      % Does not work. Either misplaced \noalign or \omit 
\makeatother

\begin{document}

\begin{tabular}{cc}
a1 & a2 \\
\myline
b1 & b2 \\
\myline[1-2] 
\end{tabular}

\end{document}

К сожалению, это приводит к неправильному расположению \noalignили \omit(или и того, и другого). Кажется, что это \@ifnextcharне полностью расширяется со временем. Есть идеи?

решение1

Из-за особенностей \noalignработы сканирования нерасширяемая команда (здесь \futureletиспользуется \@ifnextchar) начинает новую ячейку выравнивания, и вставлять строку уже поздно.

Вам необходимо выполнить сканирование на предмет необязательного аргумента внутри \noalignгруппы:

\documentclass{standalone}

\makeatletter
\def\myline{%
  \noalign\bgroup
  \@ifnextchar[%
    {\aftergroup\mycline\egroup}%
    {\aftergroup\hline\egroup}%
}
\def\mycline[#1]{\cline{#1}}
\makeatother

\begin{document}

\begin{tabular}{cc}
a1 & a2 \\
\myline
b1 & b2 \\
\myline[1-1]
c1 & c2
\end{tabular}

\end{document}

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

Зачем ты ищешь неприятностей?;-)

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