Problema com expansão de \@ifnextchar dentro do ambiente tabular

Problema com expansão de \@ifnextchar dentro do ambiente tabular

Gostaria de definir uma macro que se expanda para \hlinee \clinedentro 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 \noalignou \omit(ou ambos) extraviado. Parece que isso \@ifnextcharnão se expande totalmente com o tempo. Qualquer ideia?

Responder1

Devido ao \noalignfuncionamento da varredura, um comando não expansível (aqui \futureletusado 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 \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}

insira a descrição da imagem aqui

Por que você está procurando problemas?;-)

informação relacionada