私は関数プログラミングに関する論文を書いています。この論文では関数の適用はスペースで表されます (例: f(x,y) の場合は fxy)。LaTeX で正しいスペースを挿入するには、どのような方法が有効でしょうか。
1つの引数を持つ関数の場合は、mathopを次のように使用できることを知っています。
\newcommand\foo{\mathop{\mathrm{foo}}}
しかし、それをどのように一般化すればよいのか疑問に思いました。
特に、$\foo x~y$ と $\foo x\,y$ は正しい間隔を与えていないようです。
答え1
関数名と引数リストの 2 つの引数を持つコマンドを使用することをお勧めします。この方法により、表記法について簡単に考えを変更できます (コード内のコメントを参照)。
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\fun}{mm}
{% #1 = function name
% #2 = arguments, comma separated
\operatorname{\mathsf{#1}}% style as you like
% first possibility
\,\clist_use:nn { #2 } { \,\, }% no parentheses and space between variables
% second possibility
%\clist_use:nn { #2 } { \, }% no parentheses and space between variables
% third possibility
%(\clist_use:nn { #2 } { , })% standard notation
}
\ExplSyntaxOff
\begin{document}
\[
\fun{foo}{x,y} + \fun{baz}{x,y,z}
\]
\end{document}
細いスペースは小さすぎるように思われたので、細いスペースを 2 倍にしました。2 番目の可能性を使用した場合の比較を以下に示します。
完全を期すために、3 番目の可能性を示します。
ドキュメント内のコードではなく、定義のみを変更します。
答え2
ソース リストと疑似コードでは、関数名をタイプライター フォントでタイプセットするのが通例です。(ただし、サンセリフやスモール キャップスなどの別のスタイルが好みの場合もあります。) これは多くの場合、間隔にも適用されますが、読みやすくしたい場合は、関数とその引数の間隔を、関係演算子よりも少し狭い間隔にし、演算の順序と一致させる必要があると思います。
つまり、次のような感じでしょうか:
\documentclass{article}
\usepackage{amsmath}
\usepackage{inconsolata} % Or your monospace font of choice.
\newcommand\foo[2]{%
\textup{\texttt{foo}}\,\textup{\texttt{#1}}\,\textup{\texttt{#2}}%
}
\begin{document}
\[ \foo{x}{y} + \foo{y}{z} \geq \foo{x}{z}
\]
\end{document}
もちろん、これをさらに装飾することもできます。たとえば、このスタイルはDEKの具体的な数学:
\documentclass{article}
\usepackage{amsmath}
\usepackage{inconsolata} % Or your monospace font of choice.
\usepackage{eulervm}
\newcommand\foo[2]{%
\textup{\texttt{foo}}\,{#1}\,{#2}%
}
\begin{document}
\[ \foo{x}{y} + \foo{y}{z} \geq \foo{x}{z}
\]
\end{document}
これらを 1 つまたは 2 つ以上宣言する場合は、任意のソース関数を宣言するためのより一般的なコマンドが必要になります。