¿Es esta orden de sacrificio una buena idea?

¿Es esta orden de sacrificio una buena idea?

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 \authorse \titletrabaja en la articleclase.

\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 \namese expande al nombre y \setnamedefine 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 \authory \titleen LaTeX realmente deberían ser \setauthory \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 \xdeftake para hacer que la redefinición (ampliada) sea global o \protected@xdefpara acomodar "construcciones extrañas" en los nombres...

información relacionada