我正在寫一篇關於函數式程式設計的論文,其中函數應用程式以空格表示(例如,fxy 表示 f(x,y))。在 LaTeX 中排版以獲得正確間距的正確方法是什麼?
我知道對於單一參數函數可以使用 mathop 如下
\newcommand\foo{\mathop{\mathrm{foo}}}
但我想知道如何概括它。
特別是 $\foo x~y$ 和 $\foo x\,y$ 似乎沒有給出正確的間距。
答案1
我建議使用帶有兩個參數的命令:函數名稱和參數列表。這樣您就可以輕鬆地改變您對符號的看法(請參閱程式碼中的註解)。
\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
在來源列表和偽代碼中,習慣上用打字機字體排版函數名稱。 (儘管您可能更喜歡不同的樣式,例如無襯線或小型大寫字母。)這通常會擴展到間距,但如果您確實想讓其易於閱讀,我認為您希望函數及其參數的間距為比二元運算子更接近,二元運算子的間隔比關係運算子更近,以符合運算順序。
所以,也許是這樣的:
\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}
如果您聲明其中一兩個以上,則需要一些更通用的命令來聲明任意來源函數。