我想定义一个宏,根据下一个字符扩展到表格环境\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}
你干嘛自寻烦恼?;-)