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