Configurar correctamente Mathrel en el símbolo negado con \NewNegationCommand

Configurar correctamente Mathrel en el símbolo negado con \NewNegationCommand

La definición predeterminada de \not\modelsno es satisfactoria con respecto al espaciado:

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

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

da

espaciado predeterminado

Creo que es porque le falta \mathrel: agregarlo manualmente da un espaciado correcto. Por supuesto, escribir esto cada vez no es aceptable, así que estoy tratando de definir una \notmodelspara hacer esto.

Descubrí que Unicode-math hace algunos cambios al anterior \noty proporciona un archivo \NewNegationCommand.

Sin embargo, el tal vez ingenuo

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

$a\notmodels b$
\end{document}

da :Se excedió la capacidad de TeX, lo siento [tamaño del nido semántico = 500]. $a\nomodelos

Sospechando una recursión interminable, intenté

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

$a\notmodels b$
\end{document}

pero da:Falta { insertado. $a\nomodelos, lo cual me parece bastante inquietante.

Tercer intento

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

obras…

Pero esto me parece muy desconcertante.

¿Cómo puedo salir mejor de esto?

Respuesta1

Negar símbolos es una molestia con unicode-math. :-(Pero hay una salida.:-)

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

La sintaxis para \NewNegatedCommandes

\NewNegatedCommand{\foo}{<code>}

¿Dónde \fooestá el símbolo de relación que se va a negar? Esto define tanto la combinación \not\foocomo el comando \notfoo.

Aquí utilizo un pequeño núcleo para evitar el choque.

ingrese la descripción de la imagen aquí

Por cierto, esto parece ser un error en XeTeX para \mathoverlayaccent, porque la combinación \not\modelsfunciona en LuaLaTeX (aunque da un espaciado incorrecto), lo que podría solucionarse con

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

pero el resultado no es tan satisfactorio

ingrese la descripción de la imagen aquí

La solución \altnotfunciona tanto con XeLaTeX como con LuaLaTeX.

Respuesta2

No preguntes por qué, pero lo siguiente funciona (que básicamente hace una expansión manualmente):

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

$a\notmodels b$
\end{document}

información relacionada