Im l3basics
Modul 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 \removefirstoftwo
Fall 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:Nn
Methode 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}
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 :Nn
Methode 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 :Npn
ist die Methode obligatorisch. Dasselbe gilt, wenn die Signatur nicht „Standard“ ist, also nur mit N
, n
, T
oder F
-Spezifizierern. Eine Funktion mit einem w
Spezifizierermussverwenden :Npn
.