如何在LaTeX中创建像\ title这样的命令?

Kji*_*jir 16 latex

我正在为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因为有@迹象.


Loh*_*run 7

这是我在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)