Aliasing, com ou sem argumento?

Aliasing, com ou sem argumento?

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 \letcomo 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 \somecommandirá se comportar como desejar, mas você também tem \oldsomecommandum comando disponível para lhe dar o comportamento antigo.

Resumindo, ao escrever \newcommand\keyword{\emph}, \keywordirá expandir para \emph. Ao escrever \let\keyword\emph, \keywordexpandiremos 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:

informação relacionada