
La definición predeterminada de \not\models
no es satisfactoria con respecto al espaciado:
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
$a\models b$
$a\not\models b$
\end{document}
da
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 \notmodels
para hacer esto.
Descubrí que Unicode-math hace algunos cambios al anterior \not
y 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 \NewNegatedCommand
es
\NewNegatedCommand{\foo}{<code>}
¿Dónde \foo
está el símbolo de relación que se va a negar? Esto define tanto la combinación \not\foo
como el comando \notfoo
.
Aquí utilizo un pequeño núcleo para evitar el choque.
Por cierto, esto parece ser un error en XeTeX para \mathoverlayaccent
, porque la combinación \not\models
funciona 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
La solución \altnot
funciona 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}