![表形式環境内での \@ifnextchar の展開に関する問題](https://rvso.com/image/305898/%E8%A1%A8%E5%BD%A2%E5%BC%8F%E7%92%B0%E5%A2%83%E5%86%85%E3%81%A7%E3%81%AE%20%5C%40ifnextchar%20%E3%81%AE%E5%B1%95%E9%96%8B%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E5%95%8F%E9%A1%8C.png)
次の文字に応じて表形式環境に展開したり\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}
なぜトラブルを探しているのですか?;-)