Как мне создать команду вроде \ title в LaTeX? - PullRequest
16 голосов
/ 14 мая 2010

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

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

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

Ответы [ 2 ]

19 голосов
/ 14 мая 2010

Если вы посмотрите на 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 из-за знаков @.

7 голосов
/ 14 мая 2010

Вот пример команды, которую я использовал в своем классе thesis.cls. Он определяет новую команду \university, которая работает как команды \title или \author со значением по умолчанию, равным «нет университета». Если я не использую команду \university в моей преамбуле, вместо нее будет использовано значение по умолчанию.

\def\@university{no university}
\newcommand{\university}[1]{
  \def\@university{#1}
}

Тогда в команде \maketitle вы можете получить что-то вроде:

\newcommand{\maketitle}{
  {\LARGE{\bf \@title}}\\
  {\small{\@university}}\\
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...