表格环境中 \@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}

在此处输入图片描述

你干嘛自寻烦恼?;-)

相关内容