Как создать команду типа \title в LaTeX?

Я пишу класс документа для LaTeX, и я хочу, чтобы он был общим. В этом документе класс я переопределяет команду \maketitle для отображения пользовательской титульной страницы, и здесь я хочу отобразить некоторую информацию, такую ​​как название, автор и т.д., А также некоторые другие сведения. Вот как я показываю название:

{\LARGE{\bf \@title}}\\

Я хотел бы создать новую команду, которая работает аналогично \title или \author, как я могу это сделать?

Ответы

Ответ 1

Если вы посмотрите latex.ltx, вы увидите, что \title определяется следующим образом:

\def\title#1{\gdef\@title{#1}}
\def\@title{\@[email protected]{No \noexpand\title given}\@ehc}

Это низкоуровневые команды TeX. \title - это команда, которая переопределяет \@title для расширения до аргумента, указанного в \title. В более современных командах LaTeX ваше собственное определение может выглядеть так:

\newcommand\foo[1]{\renewcommand\@foo{#1}}
\newcommand\@foo{\@[email protected]{No \noexpand\foo given}\@ehc}

Лучше использовать \PackageError или \ClassError, чтобы отобразить сообщение об ошибке. Или, если вы хотите, чтобы \foo был необязательным и по умолчанию был пустым:

\newcommand\foo[1]{\renewcommand\@foo{#1}}
\newcommand\@foo{}

Если это не внутри пакета, вам придется помещать его между \makeatletter и \makeatother из-за знаков @.

Ответ 2

Вот пример команды, которую я использовал в классе 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}}\\
}