我正在编写一个LaTeX文档类,并希望它是通用的。在这个文档类中,我重新定义了\maketitle
命令以显示自定义标题页,并在此处显示一些信息,例如标题、作者等,以及其他一些信息。下面是我如何显示标题:
{\LARGE{\bf \@title}}\\
我想创建一个类似于 \title
或 \author
的新命令,我该如何做到这一点?
我正在编写一个LaTeX文档类,并希望它是通用的。在这个文档类中,我重新定义了\maketitle
命令以显示自定义标题页,并在此处显示一些信息,例如标题、作者等,以及其他一些信息。下面是我如何显示标题:
{\LARGE{\bf \@title}}\\
我想创建一个类似于 \title
或 \author
的新命令,我该如何做到这一点?
如果你查看 latex.ltx
,你可以看到 \title
的定义如下:
\def\title#1{\gdef\@title{#1}}
\def\@title{\@latex@error{No \noexpand\title given}\@ehc}
这些是低级别的TeX命令。 \title
是一种重新定义 \@title
的命令,使其扩展为给定给 \title
的参数。在更现代的LaTeX命令中,您自己的定义可能如下所示:
\newcommand\foo[1]{\renewcommand\@foo{#1}}
\newcommand\@foo{\@latex@error{No \noexpand\foo given}\@ehc}
最好使用 \PackageError
或 \ClassError
来显示错误信息。或者,如果您想让 \foo
是可选的并且默认为空:
\newcommand\foo[1]{\renewcommand\@foo{#1}}
\newcommand\@foo{}
如果这不在一个包内,你需要把它放在\makeatletter
和\makeatother
之间,因为有@
符号。
\renewcommand\@foo{#1}
的 \newcommand\foo[1]{}
等内容?同时,为什么需要放在 \makeatletter
和 \makeatother
之间?这些东西是什么,它们有什么作用?
抱歉,我只是想更好地理解这个代码。 - Ekanshdeep Gupta\makeatletter
和 \makeatother
的说明。我们所做的是默认定义 \@foo
抛出一个错误消息,除非它被 \foo
的声明覆盖掉。 \foo
然后将 \@foo
命令更新为我们给出的任何参数(通过 \foo {blah blah}
等)。然后在 \@maketitle
中,我们可以像使用 \@title
、\@date
等一样使用 \@foo
。 - Ekanshdeep Gupta这里是我在thesis.cls
类中使用的一个示例命令。它定义了一个名为\university
的新命令,该命令的作用与\title
或\author
命令相同,其默认值为“no university”。如果我在导言部分不使用\university
命令,则将使用默认值。
\def\@university{no university}
\newcommand{\university}[1]{
\def\@university{#1}
}
然后,在 \maketitle
命令中,您可以添加如下内容:
\newcommand{\maketitle}{
{\LARGE{\bf \@title}}\\
{\small{\@university}}\\
}