¿Cuál es la forma correcta de asignar un alias a otro comando?
\newcommand*{\keyword}{\emph}
o:
\newcommand*{\keyword}[1]{\emph{#1}}
Aparte de que el segundo es más explícito, ¿existen diferencias reales?
Respuesta1
La diferencia surgirá cuando elaliasEl comando toma un argumento opcional.
\newcommand*\keyword{\othercommand}
podrá manejar cualquier posible argumento opcional. Pero
\newcommand*\keyword[1]{\othercommand{#1}}
solo podrá manejar la situación en la que \othercommand
se llame sin un argumento opcional.
En el caso de \emph
, esto no es un problema ya que no hay ningún argumento opcional que pueda adoptarse allí. Entonces, cualquier enfoque debería funcionar bien.
Cuando eres estrictamentealias, mi opinión personal sería utilizar la primera
\newcommand*\keyword{\othercommand}
En una situación en la que estoy haciendo algo más que simplemente crear un alias, usaría
\newcommand*\keyword[1]{\othercommand{#1}}
Sólo por dar un ejemplo,
\newcommand*\keyword[1]{`\emph{#1}'}
(aunque lo más probable es que otros objeten que las comillas son innecesarias, \emph
solo lo digo como una ilustración de lo que podría significar "más que simplemente un alias").
dejando
Dado que esto surgió en los comentarios, mencionaré algunas cosas sobre \let
cómo ejecutar un comando.
A veces desea cambiar el comportamiento predeterminado de una macro LaTeX. Por ejemplo, supongamos que hay una macro definida como
\newcommand*\somecommand[1]{\emph{#1}}
pero le gustaría que se comportara de manera diferente. Entonces podrías simplemente reescribirlo de la siguiente manera:
\renewcommand*\somecommand[1]{\textbf{#1}}
Pero entonces podría encontrarse con una situación en la que realmente le gustaría tener la definición original. En ese caso, antesrenovandoel comando, podrías hacer algo como
\let\oldsomecommand\somecommand
\renewcommand*\somecommand[1]{\textbf{#1}}
Ahora \somecommand
se comportará como desee, pero también tiene \oldsomecommand
un comando disponible para darle el comportamiento anterior.
En pocas palabras, al escribir \newcommand\keyword{\emph}
, \keyword
se expandirá a \emph
. Al escribir \let\keyword\emph
, \keyword
se ampliará, no a \emph
, sino a la definición de \emph
.
Sin embargo, \let
no siempre es capaz de capturar todo el poder de un comando que ha sidobendito/malditocon argumentos opcionales. Hay muchas publicaciones en este sitio sobre cómo manejar este tipo de situaciones, así que le señalaré solo algunas aquí:
- Ver¿Cuál es la diferencia entre \let y \def?para conocer la esencia básica del mismo.
- Ver¿Cuándo utilizar \LetLtxMacro?para obtener una explicación detallada de
\let
cómo solucionar problemas relacionados con las opciones. - Ver tambiénSímbolo de raíz “cerrada” (cuadrada)(aunque la pregunta original no se trata realmente de
\let
ting).