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 \test
se utiliza en el documento.
Pero cuando intento establecer \test
un nuevo valor con
\test{some other content}
más tarde, parece simplemente generar el valor de \test
y luego "algún otro contenido".
¿Cómo evito que LaTeX expanda \test
y llame a \renewcommand
para actualizar el valor?
Respuesta1
El primer uso de \test
se redefinirá \test
como 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 xparse
para 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.