Problema con la expansión de \@ifnextchar dentro del entorno tabular

Problema con la expansión de \@ifnextchar dentro del entorno tabular

Me gustaría definir una macro que se expanda hacia \hliney \clinedentro del entorno tabular dependiendo del siguiente carácter:

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

Desafortunadamente, esto resulta en un error \noaligno \omit(o ambos) fuera de lugar. Parece que eso \@ifnextcharno se expande completamente con el tiempo. ¿Alguna idea?

Respuesta1

Debido a cómo \noalignfunciona el escaneo, un comando no expandible (aquí \futureletusado por \@ifnextchar) inicia una nueva celda de alineación y es demasiado tarde para insertar una línea.

Tienes que buscar el argumento opcional dentro de un \noaligngrupo:

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

ingrese la descripción de la imagen aquí

¿Por qué buscas problemas?;-)

información relacionada