Qual é a maneira correta de alias de um comando para outro?
\newcommand*{\keyword}{\emph}
ou:
\newcommand*{\keyword}[1]{\emph{#1}}
Além do segundo ser mais explícito, existem diferenças reais?
Responder1
A diferença surgirá quando oaliascomando recebe um argumento opcional.
\newcommand*\keyword{\othercommand}
será capaz de lidar com quaisquer possíveis argumentos opcionais. Mas
\newcommand*\keyword[1]{\othercommand{#1}}
só será capaz de lidar com a situação em que\othercommand
é chamado sem um argumento opcional.
No caso de\emph
, isso não é um problema, pois não há nenhum argumento opcional a ser usado. Portanto, qualquer abordagem deve funcionar bem.
Quando você está estritamentealias, minha opinião pessoal seria usar o primeiro
\newcommand*\keyword{\othercommand}
Em uma situação em que estou fazendo algo mais do que apenas alias, eu usaria
\newcommand*\keyword[1]{\othercommand{#1}}
Puramente por exemplo,
\newcommand*\keyword[1]{`\emph{#1}'}
(embora outros provavelmente objetem que as aspas são desnecessárias, \emph
quero dizer isso apenas como uma ilustração do que "mais do que apenas alias" pode significar).
De locação
Como isso apareceu nos comentários, mencionarei algumas coisas sobre \let
como executar um comando.
Às vezes você deseja alterar o comportamento padrão de uma macro LaTeX. Por exemplo, suponha que haja uma macro definida como
\newcommand*\somecommand[1]{\emph{#1}}
mas você gostaria que ele se comportasse de maneira diferente. Então você poderia simplesmente reescrevê-lo da seguinte maneira:
\renewcommand*\somecommand[1]{\textbf{#1}}
Mas então você pode se deparar com uma situação em que realmente gostaria de ter a definição original. Nesse caso, antesrenovandoo comando, você poderia fazer algo como
\let\oldsomecommand\somecommand
\renewcommand*\somecommand[1]{\textbf{#1}}
Agora \somecommand
irá se comportar como desejar, mas você também tem \oldsomecommand
um comando disponível para lhe dar o comportamento antigo.
Resumindo, ao escrever \newcommand\keyword{\emph}
, \keyword
irá expandir para \emph
. Ao escrever \let\keyword\emph
, \keyword
expandiremos não para \emph
, mas para a definição de \emph
.
No entanto,\let
nem sempre é capaz de capturar todo o poder de um comando que vem sendoabençoado/amaldiçoadocom argumentos opcionais. Há muitas postagens neste site sobre como lidar com essas situações, então vou apontar apenas algumas aqui:
- VerQual é a diferença entre \let e \def?para obter a essência básica disso.
- VerQuando usar \LetLtxMacro?para obter uma explicação detalhada sobre
\let
como lidar com questões que envolvem opções. - Veja tambémSímbolo de raiz “fechada” (quadrada)(mesmo que a pergunta original não seja realmente sobre
\let
ting.)