我想要自定义运算符的特定间距行为。我可以通过设置数学类(\mathord
等等)来产生所需的间距,但我必须根据具体情况进行操作,因为没有一个数学类适用于所有情况。有没有更自动化的解决方案?
在我的文档中,该运算符$(A\smalltriangleright B)$
表示“从 A 强制转换为 B”。它是一个前缀运算符,在某些情况下需要下标。
当运算符应用于参数时,运算符和参数之间应该有一些空格。mathbin 空间或 mathrel 空间都是可以接受的。
当使用函数组合运算符组合运算符时
\circ
,它们应该像普通符号一样,\circ
扮演二元运算符的角色。
我无法获得在两种情况下具有正确间距的运算符的单一定义:
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathabx}
\newcommand{\coerceSub}[3]{(\mathord{#1}\smalltriangleright\mathord{#2})_{#3}}
\begin{document}
In an operator application, the ``mathrel'' version looks better.
\begin{gather}
% OK
\mathrel{\coerceSub uv1} x \\
% Not OK: no space between operator and operand
\coerceSub uv1 x
\end{gather}
In an operator composition, the plain version looks better.
\begin{gather}
% Not OK: no space between \circ and c
\mathrel{\coerceSub vw1} \circ c \\
% OK
\coerceSub vw1 \circ c
\end{gather}
\end{document}
答案1
我没有字体,所以我改变了操作符,但我想\mathinner
这里可以做你想做的事,在 ord 前留一些空格,并且不会阻止 bin 原子有 bin 间距,
以下各版本中的最佳版本:
\documentclass{article}
\usepackage{amsmath,amssymb}
\newcommand{\coerceSub}[3]{(\mathord{#1}{\smallfrown}\mathord{#2})_{#3}}
\begin{document}
In an operator application, the ``mathrel'' version looks better.
\begin{gather}
% OK
\mathinner{\coerceSub uv1} x \\
\mathrel{\coerceSub uv1} x \\
% Not OK: no space between operator and operand
\coerceSub uv1 x
\end{gather}
In an operator composition, the plain version looks better.
\begin{gather}
\mathinner{\coerceSub uw1} \circ c \\
% Not OK: no space between \circ and c
\mathrel{\coerceSub vw1} \circ c \\
% OK
\coerceSub vw1 \circ c
\end{gather}
\end{document}