我正在基于 创建自己的课程article
,我想添加一个参数,subtitle
让我的课程用户可以设置类似于和title
,例如,author
date
\documentclass{myclass}
\title{My title} % This sets `\@title` to `My title` somehow.
\subtitle{Some subtitle} % I want this to set `\@subtitle` to `Some subtitle`.
\begin{document}
\makebanner % this command uses \@title and \@subtitle under the hood
\end{document}
查看源代码article.cls
,该title
命令似乎定义如下。
\global\let\@title\@empty
\global\let\title\relax
这对我来说真的没有意义,所以我认为我遗漏了一些东西。此外,添加\global\let\@subtitle\@empty
和\global\let\subtitle\relax
不起作用。正确的做法是什么?怎么article.cls
做?
答案1
在ltsect.dtx
LaTeX内核中做出如下定义:
\DeclareRobustCommand\title[1]{\gdef\@title{#1}}
\DeclareRobustCommand*\author[1]{\gdef\@author{#1}}
\DeclareRobustCommand*\date[1]{\gdef\@date{#1}}
\def\@title{\@latex@error{No \noexpand\title given}\@ehc}
\def\@author{\@latex@warning@no@line{No \noexpand\author given}}
\def\@date{\today}
标准类(如article.cls
)不定义这些命令,它们使用现有的定义。您看到的“定义”不是它们的定义,只是重新定义,使它们在\maketitle
使用后不可用。
因此,您可以使用的定义是:
\let\@subtitle\@empty % default value
\protected\def\subtitle#1{\gdef\@subtitle{#1}}
(\protected\def
结果与 类似\DeclareRobustCommand
,选择你喜欢的)