![Problem mit der Erweiterung von \@ifnextchar in einer tabellarischen Umgebung](https://rvso.com/image/305898/Problem%20mit%20der%20Erweiterung%20von%20%5C%40ifnextchar%20in%20einer%20tabellarischen%20Umgebung.png)
Ich möchte ein Makro definieren, das je nach nächstem Zeichen in die Tabellenumgebung \hline
und 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 \noalign
oder \omit
(oder beidem). Es scheint, dass \@ifnextchar
es nicht rechtzeitig vollständig erweitert wird. Irgendeine Idee?
Antwort1
Aufgrund der Funktionsweise beim Scannen nach startet \noalign
ein nicht erweiterbarer Befehl (hier \futurelet
von verwendet \@ifnextchar
) eine neue Ausrichtungszelle und es ist zu spät, um eine Zeile einzufügen.
\noalign
Sie 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}
Warum suchen Sie Ärger?;-)