Escreva uma macro para definir um novo comando e invocá-lo localmente

Escreva uma macro para definir um novo comando e invocá-lo localmente

Eu escreveria uma macro \defineThisCommandque defina um novo comando \TheCommande, em seguida, o invoque localmente. O código tem que ser algo assim:

\defineThisCommand{}{
      \newcommand \ThisCommand{
           #1
      }
      \ThisCommand
}

\begin{document}
    \defineTopicOne{Some text printed}
    \defineTopicTwo{and this too}
\end{document}

gerando, no final, a saída

Some text printed

and this too

Por favor, você pode me sugerir uma maneira de resolver esse problema?

Responder1

Você quer dizer algo assim:

\documentclass[]{article}

\newcommand\defineanduse[2]
  {%
    \newcommand#1{#2}%
    #1%
  }

\begin{document}

\defineanduse\mycmd{abc}

\defineanduse\myothercmd{def}

\mycmd\myothercmd

\end{document}

insira a descrição da imagem aqui

Responder2

Quando o TeX encontra uma sequência de controle \foo, há dois casos a serem distinguidos primeiro: ou o TeX está fazendo expansão macro ou não. O último caso não é preocupante na sua situação, por isso veremos o que acontece no primeiro caso. Os casos são:

  1. a sequência de controle recebeu um significado, ou
  2. a sequência de controle é indefinida.

No primeiro caso, o TeX utiliza o significado, que deve ser adequado ao contexto: se \foofor uma macro, será expandido, se for um \chardeftoken o caracter correspondente será impresso, e assim por diante.

No segundo caso, o TeX irá parar, emitir uma mensagem de erro eignoraro token indefinido.

Portanto, você não pode fazer o que gostaria, a menos que tenha definido previamente um monte de macros

\newcommand\defineThisCommand[1]{\newcommand\ThisCommand{#1}\ThisCommand}

para cada comando local que você precisa. Isto obviamente desafia a sua intenção: você não pode ter \defineOtherCommandse não a tiver definido previamente.

A estratégia a utilizar é ter uma macro genérica comdoisargumentos:

\newcommand\define[2]{%
  \newcommand#1{#2}% define the local command
  #2% and also use it now
}

o que permite que você diga

\define\ThisCommand{whatever}

para fazer o que quiser.

informação relacionada