Mathrel auf negiertem Symbol mit \NewNegationCommand richtig einstellen

Mathrel auf negiertem Symbol mit \NewNegationCommand richtig einstellen

Die Standarddefinition von \not\modelsist hinsichtlich der Abstände nicht zufriedenstellend:

\documentclass{article}
\usepackage{unicode-math}
\begin{document}
$a\models b$

$a\not\models b$
\end{document}

gibt

Standardabstand

Ich denke, es liegt daran, dass ein fehlt \mathrel: Wenn man es manuell hinzufügt, erhält man den richtigen Abstand. Natürlich ist es nicht akzeptabel, dies jedes Mal einzugeben, also versuche ich, ein zu definieren, \notmodelsum dies zu tun.

Ich habe festgestellt, dass Unicode-Mathematik einige Änderungen gegenüber der alten Version vornimmt \notund ein \NewNegationCommand. bereitstellt.

Doch die vielleicht naiven

\documentclass{article}
\usepackage{unicode-math}
\NewNegationCommand\models{\mathrel{\not\models}}
\begin{document}
$a\models b$

$a\notmodels b$
\end{document}

gibt:TeX-Kapazität überschritten, tut mir leid [semantische Nestgröße=500]. $a\notmodels

Da ich eine endlose Rekursion vermutete, versuchte ich

\documentclass{article}
\usepackage{unicode-math}
\edef\ysnm{\not\models}
\NewNegationCommand\models{\mathrel{\ysnm}}
\begin{document}
$a\models b$

$a\notmodels b$
\end{document}

aber es gibt:Fehlendes { eingefügt. $a\notmodels, was ich ziemlich beunruhigend finde.

Dritter Versuch

\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}

funktioniert…

Aber ich finde das sehr rätselhaft.

Wie kann ich da besser rauskommen?

Antwort1

Das Negieren von Symbolen ist mit mühsam unicode-math. :-(Aber es gibt einen Ausweg.:-)

\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}

Die Syntax für \NewNegatedCommandist

\NewNegatedCommand{\foo}{<code>}

wobei \foodas zu negierende Relationssymbol ist. Dies definiert sowohl die Kombination \not\fooals auch den Befehl \notfoo.

Hier verwende ich einen kleinen Kern, um den Konflikt zu vermeiden.

Bildbeschreibung hier eingeben

Dies scheint übrigens ein Fehler in XeTeX zu sein \mathoverlayaccent, da die Kombination \not\modelsin LuaLaTeX funktioniert (wenn auch mit falschen Abständen), was behoben werden könnte mit

\NewNegationCommand{\models}{\mathrel{\notaccent\models}}

aber das Ergebnis ist nicht so zufriedenstellend

Bildbeschreibung hier eingeben

Die Lösung \altnotfunktioniert sowohl mit XeLaTeX als auch mit LuaLaTeX.

Antwort2

Fragen Sie nicht warum, aber Folgendes funktioniert (wobei im Grunde eine Erweiterung manuell durchgeführt wird):

\documentclass{article}
\usepackage{unicode-math}
\NewNegationCommand{\models}{\mathrel{\not⊧}}
\begin{document}
$a\models b$

$a\notmodels b$
\end{document}

verwandte Informationen