Я пишу класс документов для ЛАТЕКСА, и я хочу, чтобы он был универсален. В этом классе документов я переопределяю \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
из-за знаков @
.
Здесь это пример команды, которую я использовал в своем классе thesis.cls
. Он определяет новую команду \ University
, которая работает как команды \ title
или \ author
со значением по умолчанию, равным «без университета». Если я не использую команду \ University
в преамбуле, вместо нее будет использоваться значение по умолчанию.
\def\@university{no university}
\newcommand{\university}[1]{
\def\@university{#1}
}
Затем в команде \ maketitle
вы можете указать что-то вроде:
\newcommand{\maketitle}{
{\LARGE{\bf \@title}}\\
{\small{\@university}}\\
}