在 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
)的页面。