![Problema con la expansión de \@ifnextchar dentro del entorno tabular](https://rvso.com/image/305898/Problema%20con%20la%20expansi%C3%B3n%20de%20%5C%40ifnextchar%20dentro%20del%20entorno%20tabular.png)
Me gustaría definir una macro que se expanda hacia \hline
y \cline
dentro 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 \noalign
o \omit
(o ambos) fuera de lugar. Parece que eso \@ifnextchar
no se expande completamente con el tiempo. ¿Alguna idea?
Respuesta1
Debido a cómo \noalign
funciona el escaneo, un comando no expandible (aquí \futurelet
usado 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 \noalign
grupo:
\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}
¿Por qué buscas problemas?;-)