モジュールには、l3basics
各コマンド生成関数に対して 2 つのメソッドが用意されています。1 つは関数シグネチャの提供を必要としますが、2 つ目はその必要はありません。
2 番目はより簡潔ですが、一方を使用する利点は他よりもあるでしょうか? (もちろん、仮想的なケースなど、1 つのトークンを完全に削除する必要があり、\removefirstoftwo
2 番目の方法を適用できない明らかな場合を除きます)。
2 つのアプローチを説明する MWE を提供します。
\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}
答え1
定義される関数にシグネチャが追加されると、2 つの方法は完全に同等になります。
この\cs_new:Nn
方法は、パラメータ テキストを作成する必要があるため、効率が低くなります。
あなたの例に何かを追加すると、同一性がより明確になります。
\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}
後者の方法は簡潔なので好まれるかもしれませんが、本質的には個人の好みの問題です。
一般的に、私は明示的なパラメータ テキストを表示することを好みますが、それは私だけです。
なぜ両方提供されているのでしょうか? おそらく、この:Nn
方法は従来の に似ており\newcommand
、パラメータ テキストがオプションの引数から構築され、ここでは定義されているマクロのシグネチャに置き換えられているためです。
警告。シグネチャなしで関数を定義することもできますが、その場合、メソッド:Npn
は必須です。シグネチャが「標準」でない場合、つまり、、、N
または指定子n
のみの場合も同様です。指定子を持つ関数T
F
w
しなければならない使用:Npn
。