在表格環境中擴充 \@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}

在此輸入影像描述

為什麼要找麻煩呢?;-)

相關內容