(重新)newDocumentCommand 干扰布局

(重新)newDocumentCommand 干扰布局

IEEEtran在使用模式中的类准备论文时,我使用conference重载命令(供个人使用)。结果是在作者中添加了一个额外的空白行:\end\RenewDocumentCommand

\documentclass[conference]{IEEEtran}
\usepackage{xparse}

\title{An unimportant paper}
\author{\IEEEauthorblockN{First author}
\IEEEauthorblockA{address}}

% \let\oldend\end
% \RenewDocumentCommand\end{m}{\oldend{#1}}

\begin{document} 
\maketitle
------------------------- 
\end{document}

取消注释这两行注释后,作者下方(和行上方---------)会出现一个额外的空白行。它来自\crcr显示作者时的命令。当\renewcommand使用 代替 时,不会发生这种现象\RenewDocumentCommand

因此,我的问题如下: - 为什么会发生这种情况? - 虽然在这种情况下很容易解决,但是有没有办法提前知道何时会发生这种现象?

答案1

问题主要表现为tabular,因为如果已用重新定义,则\endtabular命令被看到得太晚了。\end\RenewDocumentCommand

\documentclass[conference]{IEEEtran}
\usepackage{xparse}

\let\oldend\end
\RenewDocumentCommand\end{m}{\oldend{#1}}

\begin{document} 

\hrule
\begin{tabular}{c}
xyz \\
uvw \\
\end{tabular}
\begin{tabular}{c}
xyz \\
uvw \\
foo \\
\oldend{tabular}
\begin{tabular}{c}
xyz \\
uvw \\
\oldend{tabular}
\hrule

\end{document}

enter image description here

如您所见,第二个tabular与第一个对齐,而第三个没有额外的行。

这并不是\crcr如你所怀疑的那样因为某些原因。

  • \\结束一场争吵。

  • 现在 LaTeX 会查找是否存在\hline或类似的命令,并在执行过程中扩展标记。

  • 如果找到\omit\noalign,它将执行适当的操作(前者来自\multicolumn,后者来自\hline)。

  • 其他命令启动一个单元格。

在“其他命令”中,所有定义为的命令都停止:根据程序员的选择,它们停止对和的\protected搜索。\omit\noalign

因此,\end当表格单元格已经开始时,它就会展开,从而出现一个新行。

每个用\NewDocumentCommand\RenewDocumentCommand或定义的宏\DeclareDocumentCommand都是\protected。但那些用 定义的宏则不是\DeclareExpandableDocumentCommand

顺便说一句,您看到了问题,因为其运作中\maketitle存在问题。tabular

答案2

\end必须是可扩展的。

\documentclass[conference]{IEEEtran}
\usepackage{xparse}

\title{An unimportant paper}
\author{\IEEEauthorblockN{First author}
\IEEEauthorblockA{address}}

\let\oldend\end
\DeclareExpandableDocumentCommand\end{m}{\oldend{#1}}

\begin{document} 
\maketitle
------------------------- 
\end{document}

注意:你为什么不使用\AtEndDocument{...}

答案3

没有xparse

\let\oldend\end
\renewcommand\end{\oldend}

相关内容