对于间距 ,的默认定义\not\models
不令人满意:
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
$a\models b$
$a\not\models b$
\end{document}
给出
我认为这是因为它缺少一个\mathrel
:手动添加它可以得到正确的间距。当然每次都输入这个是不可接受的,所以我尝试定义一个\notmodels
来做到这一点。
我发现 unicode-math 对旧的做了一些改变\not
并提供了一个\NewNegationCommand
。
然而,也许有些天真
\documentclass{article}
\usepackage{unicode-math}
\NewNegationCommand\models{\mathrel{\not\models}}
\begin{document}
$a\models b$
$a\notmodels b$
\end{document}
得到:TeX 容量超出,抱歉 [语义嵌套大小=500]。$a\notmodels
由于怀疑存在无休止的递归,我尝试了
\documentclass{article}
\usepackage{unicode-math}
\edef\ysnm{\not\models}
\NewNegationCommand\models{\mathrel{\ysnm}}
\begin{document}
$a\models b$
$a\notmodels b$
\end{document}
但它给出了:缺少 { 插入。$a\notmodels,我发现这非常令人不安。
第三次尝试
\documentclass{article}
\usepackage{unicode-math}
\AtBeginDocument{
\newbox\boxnm
\setbox\boxnm=\hbox{$\not\models$}
\NewNegationCommand\models{\mathrel{\copy\boxnm}}
}
\begin{document}
$a\models b$
$a\notmodels b$
\end{document}
作品…
但我发现这很令人费解。
我怎样才能更好地摆脱这种困境?
答案1
使用 来否定符号是一件痛苦的事unicode-math
。:-(
不过有办法。:-)
\documentclass{article}
\usepackage{unicode-math}
\Umathchardef\altnot=3 \symsymbols "0338
\NewNegationCommand{\models}{\models\mathrel{\mkern1mu}\altnot\mkern-1mu}
\begin{document}
$a\models b$
$a\not\models b$
$a\notmodels b$
\end{document}
语法\NewNegatedCommand
是
\NewNegatedCommand{\foo}{<code>}
其中\foo
是需要否定的关系符号。这定义了组合\not\foo
和命令\notfoo
。
在这里我使用了较小的字距以避免冲突。
顺便说一句,这似乎是 XeTeX 中的一个错误\mathoverlayaccent
,因为该组合\not\models
在 LuaLaTeX 中有效(尽管给出了错误的间距),可以使用
\NewNegationCommand{\models}{\mathrel{\notaccent\models}}
但结果并不令人满意
该解决方案\altnot
适用于 XeLaTeX 和 LuaLaTeX。
答案2
不要问为什么,但以下有效(基本上手动进行一次扩展):
\documentclass{article}
\usepackage{unicode-math}
\NewNegationCommand{\models}{\mathrel{\not⊧}}
\begin{document}
$a\models b$
$a\notmodels b$
\end{document}