Usar un comando para renovar el comando

Usar un comando para renovar el comando

Tengo:

\newcommand{\test}[1]{\renewcommand{\test}{#1}}

en un archivo de clase para que la configuración del comando sea más limpia en el documento mismo.

Todo esto funciona si el documento contiene:

\test{some content}

y genera 'algo de contenido' cuando \testse utiliza en el documento.

Pero cuando intento establecer \testun nuevo valor con

\test{some other content} 

más tarde, parece simplemente generar el valor de \testy luego "algún otro contenido".

¿Cómo evito que LaTeX expanda \testy llame a \renewcommandpara actualizar el valor?

Respuesta1

El primer uso de \testse redefinirá \testcomo un comando sin argumento, que solo genera el argumento de la primera llamada. Entonces tu sugerencia no funcionará. Tienes que usar algo como:

\newcommand{\test}{}
\newcommand{\settest}[1]{\renewcommand{\test}{#1}}

Entonces puedes usar

\settest{some content}
\test, \test, \test% shows "some contents" three times
\settest{some other content}
\test, \test% shows "some other contents" two times

Podría usar un argumento opcional, por ejemplo, usando xparsepara distinguir entre almacenar un argumento y la salida de un argumento:

\documentclass{article}
\usepackage{xparse}

\newcommand*{\testvalue}{}
\NewDocumentCommand{\test}{o}{%
  \IfNoValueTF{#1}{\testvalue}{\def\testvalue{#1}}%
}

\begin{document}
  Define: \test[some content]

  Show: \test, \test

  Define: \test[some other contents]

  Show: \test, \test.
\end{document}

Pero esto iría en contra del principio de que un argumento opcional sólo debería modificar el comportamiento predeterminado de un comando y no cambiarlo a un comando completamente diferente. Así que no recomendaría hacer esto.

información relacionada