Escriba una macro para definir un nuevo comando e invocarlo localmente

Escriba una macro para definir un nuevo comando e invocarlo localmente

Escribiría una macro \defineThisCommandque defina un nuevo comando \TheCommandy, luego, lo invoque localmente. El código tiene que ser algo como esto:

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

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

generando, al final, la salida

Some text printed

and this too

Por favor, ¿puede sugerirme una forma de resolver este problema?

Respuesta1

Te refieres a algo como esto:

\documentclass[]{article}

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

\begin{document}

\defineanduse\mycmd{abc}

\defineanduse\myothercmd{def}

\mycmd\myothercmd

\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Cuando TeX encuentra una secuencia de control \foo, hay dos casos que hay que distinguir primero: TeX está haciendo una macro expansión o no. El último caso no es motivo de preocupación en su situación, por lo que analizamos lo que sucede en el primer caso. Los casos son:

  1. a la secuencia de control se le ha asignado un significado, o
  2. la secuencia de control no está definida.

En el primer caso, TeX usa el significado, que debe ser apropiado al contexto: si \fooes una macro, se expandirá, si es un \chardeftoken se imprimirá el carácter correspondiente, etc.

En el segundo caso, TeX se detendrá, emitirá un mensaje de error yignorarel token indefinido.

Por lo tanto, no puedes hacer lo que te gustaría, a menos que hayas definido previamente un montón de macros.

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

para cada comando local que necesite. Esto obviamente desafía tu intención: no puedes tenerlo \defineOtherCommandsi no lo has definido previamente.

La estrategia a utilizar es tener una macro genérica condosargumentos:

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

que te permite decir

\define\ThisCommand{whatever}

para hacer lo que quieras.

información relacionada