Как использовать возможности программирования LaTeX

Как использовать возможности программирования LaTeX

Как работают \newcommand, \newcommand*, \renewcommand, \renewcommand*, \newenvironment, \newenvironment*, и в чем разница между ними \renewenvironment?\newenvironment*

решение1

Чтобы ответить на этот вопрос и удовлетворить ОП...

Весь набор команд определения макросов довольно взаимосвязан:

  • \newcommand{\foo}[num_of_args][opt first arg value]{% definition} определяет\foo
  • \newcommand*{\foo}[num_of_args][opt first arg value]{% definition} определяет \foo, но не допускает разрывов в аргументах.
  • \renewcommand{\foo}переопределяет уже существующую команду\foo

  • \renewcommand*{\foo}переопределяет \foo, с no-parbreakограничением.

  • \DeclareRobustCommandс тем же синтаксисом, что \newcommandи т. д., что делает команду надежной (т. е. защищенной/нерасширяемой).

В дополнение (скрыто) \newcommandи его родственники определяются автоматически \endfoo, поэтому невозможно сказать \newcommand{\endfoo}себя. Подробнее об этом см. мой вопросЗарезервированы ли имена макросов \end.... в LaTeX2e?

Команды окружения: - \newenvironment{fooenv}[num_of_args]{first opt arg]{% startcode}{endcode}определяют окружение с именем fooenv, т. е. его можно использовать с \begin{fooenv}...\end{fooenv}. Содержимое между этой парой группируется, т. е. \(re)newcommandи т. д., изменения длины применяются только внутри этой пары и не видны снаружи, т. е. безопасны (если только \globalне используется - \renewenvironmentпереопределяет существующее окружение - \newenvironment*и \renewenvironment*применяются с no-parbreakограничением.

Кроме того, есть \providecommand(такой же синтаксис, как \newcommand), который можно использовать для того, чтобы убедиться, что некоторая команда действительно определена. Если она уже определена, то \providecommandничего не делает.

Машина, стоящая за всем, — это базовая \defкоманда TeX.
Кроме того, см.Разница между \newcommand и \newcommand*

Альтернативы из etoolboxиxparse

  • Пакет etoolboxустанавливает возможности \(re)newrobustcmd*для создания надежных команд.

  • xparseпакет: \NewDocumentCommand, \RenewDocumentCommand, \ProvideDocumentCommand, \NewDocumentEnvironmentи \ProvideDocumentEnvironmentи \DeclareDocumentEnvironmentявляются надежными версиями с лучшей обработкой аргументов, чем \newcommandи т. д. Также есть расширяемый \DeclareExpandableDocumentCommand, который следует использовать с осторожностью (как указано в xparseруководстве)

Связанный контент