Diferenças nos métodos de geração de funções LaTeX3

Diferenças nos métodos de geração de funções LaTeX3

No l3basicsmódulo existem dois métodos fornecidos para cada função de geração de comando. Um exige que a assinatura da função seja fornecida, enquanto o segundo não.

Como o segundo é mais conciso, há alguma vantagem em usar um em vez do outro? (Exceto, é claro, no caso óbvio em que é necessário remover completamente um token, como um \removefirstoftwocaso hipotético, etc., e o segundo método não pode ser aplicado).

Eu forneço um MWE ilustrando as duas abordagens.

\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}

Responder1

Os dois métodos são perfeitamente equivalentes, quando uma assinatura é adicionada à função que está sendo definida.

O \cs_new:Nnmétodo é menos eficiente, pois precisa construir o texto do parâmetro.

Se eu acrescentar algo ao seu exemplo, a identidade fica mais 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}

insira a descrição da imagem aqui

A concisão do último método pode fazer com que alguém o prefira, mas é essencialmente uma questão de preferência pessoal.

Geralmente prefiro ver o texto explícito do parâmetro, mas sou eu.

Por que ambos são oferecidos? Provavelmente porque o :Nnmétodo é semelhante ao tradicional \newcommand, onde o texto do parâmetro é construído a partir do argumento opcional, aqui substituído pela assinatura da macro que está sendo definida.

Embargo.Pode-se definir uma função sem assinatura, mas neste caso o :Npnmétodo é obrigatório. O mesmo se a assinatura não for “padrão”, ou seja, apenas com especificadores N, n, Tou . FUma função com um wespecificadordeveusar :Npn.

informação relacionada