表形式環境内での \@ifnextchar の展開に関する問題

表形式環境内での \@ifnextchar の展開に関する問題

次の文字に応じて表形式環境に展開したり\hline、表形式環境内で展開したりするマクロを定義したいと思います。\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}

\noalign残念ながら、この結果、または(あるいはその両方)の位置がずれてしまいます。時間内に完全に拡張されないよう\omitです。何かアイデアはありますか?\@ifnextchar

答え1

のスキャンの仕組みにより\noalign、展開できないコマンド (ここで\futureletは によって使用される\@ifnextchar) によって新しい配置セルが開始され、行を挿入するには遅すぎます。

グループ内のオプション引数のスキャンを実行する必要があります\noalign

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

ここに画像の説明を入力してください

なぜトラブルを探しているのですか?;-)

関連情報