Unterschiede in den Methoden zur Funktionsgenerierung in LaTeX3

Unterschiede in den Methoden zur Funktionsgenerierung in LaTeX3

Im l3basicsModul sind für jede Befehlsgenerierungsfunktion zwei Methoden vorgesehen. Die eine erfordert die Angabe der Funktionssignatur, die zweite nicht.

Da die zweite Methode prägnanter ist, gibt es Vorteile, wenn man die eine Methode statt der anderen verwendet? (Außer natürlich im offensichtlichen Fall, dass ein Token vollständig entfernt werden muss, wie etwa in einem hypothetischen \removefirstoftwoFall usw. und die zweite Methode nicht angewendet werden kann).

Ich stelle ein MWE zur Verfügung, das die beiden Ansätze veranschaulicht.

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

Antwort1

Die beiden Methoden sind vollkommen gleichwertig, wenn der definierten Funktion eine Signatur hinzugefügt wird.

Die \cs_new:NnMethode ist weniger effizient, da sie den Parametertext erstellen muss.

Wenn ich Ihrem Beispiel etwas hinzufüge, ist die Identität klarer:

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

Bildbeschreibung hier eingeben

Die Kürze der letzteren Methode ist möglicherweise dafür verantwortlich, dass man sie bevorzugt, aber im Wesentlichen ist es eine Frage der persönlichen Vorliebe.

Im Allgemeinen bevorzuge ich es, den expliziten Parametertext zu sehen, aber das ist meine Meinung.

Warum werden beide angeboten? Wahrscheinlich, weil die :NnMethode der herkömmlichen ähnelt \newcommand, bei der der Parametertext aus dem optionalen Argument erstellt wird, das hier durch die Signatur des definierten Makros ersetzt wird.

Vorbehalt.Man kann eine Funktion ohne Signatur definieren, aber in diesem Fall :Npnist die Methode obligatorisch. Dasselbe gilt, wenn die Signatur nicht „Standard“ ist, also nur mit N, n, Toder F-Spezifizierern. Eine Funktion mit einem wSpezifizierermussverwenden :Npn.

verwandte Informationen