Diferencias en los métodos de generación de funciones LaTeX3

Diferencias en los métodos de generación de funciones LaTeX3

En l3basicsel módulo se proporcionan dos métodos para cada función de generación de comandos. Uno requiere que se proporcione la firma de la función, mientras que el segundo no.

Dado que el segundo es más conciso, ¿hay alguna ventaja en utilizar uno sobre el otro? (Excepto, por supuesto, en el caso obvio en el que es necesario eliminar un token por completo, como en un \removefirstoftwocaso hipotético, etc., y el segundo método no se puede aplicar).

Proporciono un MWE que ilustra los dos enfoques.

\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
  \cs_new:Npn \exampleone:nn #1 #2 {#1 #2}
  \cs_new:Nn \exampletwo:nn{#1 #2}
  \exampleone:nn {one~}{two~}
  \exampletwo:nn {three~}{four}
\ExplSyntaxOff
\end{document}

Respuesta1

Los dos métodos son perfectamente equivalentes cuando se agrega una firma a la función que se define.

El \cs_new:Nnmétodo es menos eficiente, ya que tiene que construir el texto del parámetro.

Si agrego algo a tu ejemplo, la identidad es más clara:

\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
  \cs_new:Npn \exampleone:nn #1 #2 {#1 #2}
  \cs_new:Nn \exampletwo:nn{#1 #2}

\texttt{\cs_meaning:N \exampleone:nn}\par

\texttt{\cs_meaning:N \exampletwo:nn}\par

\ExplSyntaxOff
\end{document}

ingrese la descripción de la imagen aquí

La concisión de este último método puede hacer que uno lo prefiera, pero es esencialmente una cuestión de preferencia personal.

Generalmente prefiero ver el texto explícito del parámetro, pero ese soy yo.

¿Por qué se ofrecen ambos? Probablemente porque el :Nnmétodo es similar al tradicional \newcommand, donde el texto del parámetro se construye a partir del argumento opcional, aquí sustituido por la firma de la macro que se está definiendo.

Advertencia.Se puede definir una función sin firma, pero en este caso el :Npnmétodo es obligatorio. Lo mismo si la firma no es “estándar”, es decir solo con especificadores N, n, To . FUna función con un wespecificador.debeusar :Npn.

información relacionada