\title 命令中的参数无效

\title 命令中的参数无效

在 latex.ltx 中有两行内容涉及\title

\DeclareRobustCommand\title[1]{\gdef\@title{#1}}
\def\@title{\@latex@error{No \noexpand\title given}\@ehc}

我猜想第二行是为了在的参数为 void 时引发错误而引入的,就像\title在中一样\title{},但我不明白上面的代码是如何实现这一点的。

答案1

\maketitle排版标题时,使用\@title,默认情况下,\@title定义为:

\def\@title{\@latex@error{No \noexpand\title given}\@ehc}

因此文件:

\documentclass{article}
\begin{document}
\maketitle % <-- error here
\end{document}

将会引发错误\@title

当你执行时\title{<anything>}\title命令会执行以下操作:

\gdef\@title{<anything>}

因此排版时将使用<anything>而不是默认的错误信息。 <anything>实际上可以是任何东西,包括空,也不会有错误:

\documentclass{article}
\title{}
\begin{document}
\maketitle
\end{document}

上述文档生成了一个仅包含\today日期(以及一条警告No \author given)的页面。

相关内容