![Problema com expansão de \@ifnextchar dentro do ambiente tabular](https://rvso.com/image/305898/Problema%20com%20expans%C3%A3o%20de%20%5C%40ifnextchar%20dentro%20do%20ambiente%20tabular.png)
Gostaria de definir uma macro que se expanda para \hline
e \cline
dentro do ambiente tabular dependendo do próximo caractere:
\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}
Infelizmente, isso resulta em um \noalign
ou \omit
(ou ambos) extraviado. Parece que isso \@ifnextchar
não se expande totalmente com o tempo. Qualquer ideia?
Responder1
Devido ao \noalign
funcionamento da varredura, um comando não expansível (aqui \futurelet
usado por \@ifnextchar
) inicia uma nova célula de alinhamento e é tarde demais para que uma linha seja inserida.
Você tem que procurar o argumento opcional dentro de um \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 que você está procurando problemas?;-)