Как создать команду типа \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}}\\
}