Tengo este comando:
\newcommand{\name}[1]{\edef\name{#1}}
Primero lo llamas como en \name{Don}
y luego puedes referirte a Don usando \name
.¿Es esta una forma aceptable de expresar una constante que debe establecerse sólo una vez?
Respuesta1
Usaría diferentes comandos, uno para contener el nombre y otro para establecer el nombre.
En un paquete, es una práctica común utilizar una versión externa del comando ( \name
) para establecer el valor de una macro interna ( \@name
). Así es como \author
se \title
trabaja en la article
clase.
\makeatletter
\newcommand{\name}[1]{\gdef\@name{#1}}
\makeatother
Pero sería más claro y sencillo si utilizara diferentes tipos de comandos para indicar diferentes comportamientos. Entonces \name
se expande al nombre y \setname
define el valor de \name
:
\newcommand{\setname}[1]{\gdef\name{#1}}
Es bueno distinguir entre comandos que indican el material que se va a componer y comandos que definen constantes. En mi opinión, los comandos predeterminados \author
y \title
en LaTeX realmente deberían ser \setauthor
y \settitle
, ya que la composición tipográfica real solo ocurre cuando das el comando \maketitle
.
Respuesta2
Seguro Por qué no. Tu uso, tu elección.
Dependiendo de la aplicación específica, podría considerar usar \xdef
take para hacer que la redefinición (ampliada) sea global o \protected@xdef
para acomodar "construcciones extrañas" en los nombres...