Este comando de sacrifício é uma boa ideia?

Este comando de sacrifício é uma boa ideia?

Eu tenho este comando:

\newcommand{\name}[1]{\edef\name{#1}}

Primeiro você o chama como in \name{Don}e depois pode consultar Don usando \name.Esta é uma maneira aceitável de expressar uma constante que deve ser definida apenas uma vez?

Responder1

Eu usaria comandos diferentes, um para armazenar o nome e outro para definir o nome.

Em um pacote, é prática comum usar uma versão externa do comando ( \name) para definir o valor de uma macro interna ( \@name). É assim \authorque \titlefunciona na articleaula.

\makeatletter
\newcommand{\name}[1]{\gdef\@name{#1}}
\makeatother

Mas seria mais claro e simples se você usasse diferentes tipos de comandos para indicar diferentes comportamentos. Portanto \name, expande para o nome e \setnamedefine o valor de \name:

\newcommand{\setname}[1]{\gdef\name{#1}}

É bom distinguir entre comandos que indicam o material que será composto e comandos que definem constantes. Na minha opinião, o padrão \authore \titleos comandos no LaTeX deveriam ser realmente \setauthorand \settitle, já que a composição tipográfica real só acontece quando você dá o comando \maketitle.

Responder2

Claro, por que não. Seu uso, sua escolha.

Dependendo da aplicação específica, você pode considerar usar \xdeftake make a redefinição global (expandida) ou \protected@xdefacomodar "construções estranhas" em nomes...

informação relacionada