두 개의 인수를 사용하여 수학 연산자를 정의하는 방법은 무엇입니까?

두 개의 인수를 사용하여 수학 연산자를 정의하는 방법은 무엇입니까?

나는 함수 적용이 공백(예: f(x,y)의 경우 fxy)으로 표시되는 함수형 프로그래밍에 관한 논문을 쓰고 있습니다. 올바른 간격을 얻기 위해 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}

인콘솔라타/오일러 샘플

이들 중 하나 또는 두 개 이상을 선언하는 경우 임의의 소스 함수를 선언하기 위한 좀 더 일반적인 명령이 필요합니다.

관련 정보