Problem mit der Erweiterung von \@ifnextchar in einer tabellarischen Umgebung

Problem mit der Erweiterung von \@ifnextchar in einer tabellarischen Umgebung

Ich möchte ein Makro definieren, das je nach nächstem Zeichen in die Tabellenumgebung \hlineund innerhalb dieser erweitert wird:\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}

Leider führt dies zu einem falsch platzierten \noalignoder \omit(oder beidem). Es scheint, dass \@ifnextchares nicht rechtzeitig vollständig erweitert wird. Irgendeine Idee?

Antwort1

Aufgrund der Funktionsweise beim Scannen nach startet \noalignein nicht erweiterbarer Befehl (hier \futureletvon verwendet \@ifnextchar) eine neue Ausrichtungszelle und es ist zu spät, um eine Zeile einzufügen.

\noalignSie müssen innerhalb einer Gruppe nach dem optionalen Argument suchen :

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

Bildbeschreibung hier eingeben

Warum suchen Sie Ärger?;-)

verwandte Informationen