我正在为LaTeX编写一个文档类,我希望它是通用的.在这个文档类中,我重新定义了\maketitle
显示自定义标题页面的命令,在这里我想显示一些信息,如标题,作者等,还有一些其他信息.这是我显示标题的方式:
{\LARGE{\bf \@title}}\\
Run Code Online (Sandbox Code Playgroud)
我想创建一个与之类似的新命令,\title
或者\author
我该怎么做?
Tho*_*mas 20
如果你看一下latex.ltx
你可以看到\title
定义如下:
\def\title#1{\gdef\@title{#1}}
\def\@title{\@latex@error{No \noexpand\title given}\@ehc}
Run Code Online (Sandbox Code Playgroud)
这些是低级TeX命令.\title
是一个重新定义\@title
扩展到给出的参数的命令\title
.在更现代的LaTeX命令中,您自己的定义可能如下所示:
\newcommand\foo[1]{\renewcommand\@foo{#1}}
\newcommand\@foo{\@latex@error{No \noexpand\foo given}\@ehc}
Run Code Online (Sandbox Code Playgroud)
最好使用\PackageError
或\ClassError
显示错误消息.或者,如果您想要\foo
是可选的并且默认为空:
\newcommand\foo[1]{\renewcommand\@foo{#1}}
\newcommand\@foo{}
Run Code Online (Sandbox Code Playgroud)
如果这不在包装内,你必须把它放在它之间\makeatletter
,\makeatother
因为有@
迹象.
这是我在thesis.cls
班上使用的示例命令.它定义了一个新命令\university
,该命令作为\title
或\author
命令使用,默认值等于"no university".如果我\university
在前导中不使用该命令,则将使用默认值.
\def\@university{no university}
\newcommand{\university}[1]{
\def\@university{#1}
}
Run Code Online (Sandbox Code Playgroud)
然后,在\maketitle
命令中你可以有类似的东西:
\newcommand{\maketitle}{
{\LARGE{\bf \@title}}\\
{\small{\@university}}\\
}
Run Code Online (Sandbox Code Playgroud)