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 \author
que \title
funciona na article
aula.
\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 \setname
define 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 \author
e \title
os comandos no LaTeX deveriam ser realmente \setauthor
and \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 \xdef
take make a redefinição global (expandida) ou \protected@xdef
acomodar "construções estranhas" em nomes...