Como usar as possibilidades de programação do LaTeX

Como usar as possibilidades de programação do LaTeX

Como \newcommand, \newcommand*, \renewcommand, \renewcommand*, \newenvironment, \newenvironment*, \renewenvironment, \newenvironment*funcionam e qual a diferença entre eles?

Responder1

Para responder a isso para satisfazer o OP ...

Todo o conjunto de comandos de definição de macro está bastante conectado:

  • \newcommand{\foo}[num_of_args][opt first arg value]{% definition} define\foo
  • \newcommand*{\foo}[num_of_args][opt first arg value]{% definition} define \foo, mas não permite parbreaks nos argumentos.
  • \renewcommand{\foo}redefine um comando já existente\foo

  • \renewcommand*{\foo}redefine \foo, com a no-parbreaklimitação.

  • \DeclareRobustCommandcom a mesma sintaxe de \newcommandetc. o que torna o comando robusto (ou seja, protegido/não expansível).

Além disso (oculto) \newcommande seus parentes são definidos automaticamente \endfoo, portanto não é possível se dizer \newcommand{\endfoo}. Para saber mais sobre isso, veja minha perguntaOs nomes de macro \end.... são reservados no LaTeX2e?

Os comandos de ambiente: - \newenvironment{fooenv}[num_of_args]{first opt arg]{% startcode}{endcode}define um ambiente chamado fooenv, ou seja, pode ser usado com \begin{fooenv}...\end{fooenv}. O conteúdo entre este par é agrupado, ou seja, \(re)newcommandetc, as alterações de comprimento são aplicadas apenas dentro deste par e não são visíveis fora, ou seja, seguras (a menos que \globalnão sejam usadas - \renewenvironmentredefine um ambiente existente - \newenvironment*e \renewenvironment*são aplicadas com o no-parbreaklimite.

Além disso, existe \providecommand(mesma sintaxe de \newcommand) que pode ser usada para garantir que algum comando esteja realmente definido. Se já estiver definido, \providecommandnão faz nada.

A máquina por trás de tudo é o \defcomando básico do TeX.
Além disso, vejaDiferença entre \newcommand e \newcommand*

Alternativas de etoolboxexparse

  • O etoolboxpacote estabelece as regras \(re)newrobustcmd*para fazer comandos robustos.

  • xparsepacote: \NewDocumentCommand, \RenewDocumentCommand, \ProvideDocumentCommande \NewDocumentEnvironmente \ProvideDocumentEnvironmentsão \DeclareDocumentEnvironmentversões robustas com melhor tratamento de argumentos do que \newcommandetc. Também existe um expansível \DeclareExpandableDocumentCommand, que deve ser usado com cuidado (conforme indicado no xparsemanual)

informação relacionada