LaTeX3関数生成方法の違い

LaTeX3関数生成方法の違い

モジュールには、l3basics各コマンド生成関数に対して 2 つのメソッドが用意されています。1 つは関数シグネチャの提供を必要としますが、2 つ目はその必要はありません。

2 番目はより簡潔ですが、一方を使用する利点は他よりもあるでしょうか? (もちろん、仮想的なケースなど、1 つのトークンを完全に削除する必要があり、\removefirstoftwo2 番目の方法を適用できない明らかな場合を除きます)。

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のみの場合も同様です。指定子を持つ関数TFwしなければならない使用:Npn

関連情報