Я пишу статью о функциональном программировании, где применение функции обозначается пробелом (например, 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'sКонкретная математика:
\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}
Если вы объявляете более одного или двух из них, вам понадобится более общая команда для объявления произвольной исходной функции.