是否有可能让一个符号或组在左边表现得好像它有一个特定的数学字符类,而在右边表现得好像它有另一个?
出现这种情况的一个典型情况是将较长表达式的一部分括起来。例如,将 的第一部分括\(U \rightarrow U \rightarrow U\)
在方括号 ( \([U \rightarrow] U \rightarrow U\)
) 中会导致右方括号]
离后面的 太近U
。在这种情况下,创建一个新的\mathrel
箭头和右方括号 ( \([U \mathrel{\rightarrow ]} U \rightarrow U\)
) 可以解决问题:
但有一个完全通用的解决方案就更好了。
另一个例子:也许我想定义一个不对称关系符号
答案1
通过对不同数学课程进行一些调整,可以实现您想要的目标:
\documentclass{article}
\newcommand*\mixedmath[3]{%
#1{#3}%
\ifx#1\mathbin
\nonscript\mskip-\medmuskip
\mathord{}%
\fi
\ifx#1\mathpunct
\nonscript\mskip-\thinmuskip
\fi
\mathclose{}\mathopen{}%
\ifx#2\mathbin
\mathord{}%
\nonscript\mskip-\medmuskip
\fi
#2{}%
}
\newcommand*\ordrel[1]{\mixedmath{\mathord}{\mathrel}{#1}}
\begin{document}
\verb|ord-rel|: $A \ordrel{\vee} B$
\verb|bin-bin|: $A \mixedmath{\mathbin}{\mathbin}{\vee} B$
\verb|bin-rel|: $A \mixedmath{\mathbin}{\mathrel}{\vee} B$
\verb|rel-bin|: $A \mixedmath{\mathrel}{\mathbin}{\vee} B$
\end{document}
\documentclass{article}
\newcommand*\ordrel[1]{\mathord{#1}\mskip-\thickmuskip\mathrel{}}
\begin{document}
$A \ordrel{\vee} B$
\end{document}
该命令的想法如下\mixedmath
:第一个参数是“左行为”,第二个参数是“右行为”,第三个参数是要使用的字符。
字符设置为“左”数学类,后跟\mathclose{}
。我之所以选择 ,\mathclose
是因为这只有在它跟在 后面时才会增加一些空间\mathbin
(在这种情况下,它会将 更改为\mathbin
)\mathord
或\mathpunct
。前两个\ifx
处理这两种情况。\mathclose{}
我把 放在 后面\mathopen{}
(根据表格,没有空格!),后跟“右”数学类。由于\mathopen
,我只需要对这种\mathbin
情况进行特殊处理,这在最后一个 中完成\ifx
。
在每种情况下都需要\nonscript
,因为您不必在 中放置负空格\script(script)style
。(这就是 David 的答案中表格中的括号的含义;在这些情况下,仅在\displaystyle
和 中添加空格\textstyle
!)
答案2
一般来说没有解决方案,因为在 TeX 中每个相邻数学类之间添加的空间是固定的(luatex 允许更改它)
\math...
对于任何给定的表达式,您可以简单地添加 TeX 在类不同(将是\thinmuskip
、\medmuskip
或\thickmuskip
)时会添加的空间,而不是深度嵌套的命令。
添加的空间矩阵在 TeXBook 中,但 texbytopic 第 205 页中有一个版本
latex 定义\,
\>
并\;
添加薄、中、厚空间。