
A definição padrão de \not\models
não é satisfatória em relação ao espaçamento:
\documentclass{article}
\usepackage{unicode-math}
\begin{document}
$a\models b$
$a\not\models b$
\end{document}
dá
Acho que é porque falta um \mathrel
: adicioná-lo manualmente dá um espaçamento correto. É claro que digitar isso todas as vezes não é aceitável, então estou tentando definir um método \notmodels
para fazer isso.
Descobri que o unicode-math faz algumas alterações no antigo \not
e fornece um arquivo \NewNegationCommand
.
No entanto, o talvez ingênuo
\documentclass{article}
\usepackage{unicode-math}
\NewNegationCommand\models{\mathrel{\not\models}}
\begin{document}
$a\models b$
$a\notmodels b$
\end{document}
dá:Capacidade do TeX excedida, desculpe [tamanho do ninho semântico = 500]. $a\notmodels
Suspeitando de uma recursão sem fim, tentei
\documentclass{article}
\usepackage{unicode-math}
\edef\ysnm{\not\models}
\NewNegationCommand\models{\mathrel{\ysnm}}
\begin{document}
$a\models b$
$a\notmodels b$
\end{document}
mas dá:Faltando { inserido. $a\notmodels, o que considero bastante perturbador.
Terceira tentativa
\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}
funciona…
Mas acho isso muito intrigante.
Como posso sair disso de uma maneira melhor?
Responder1
Negar símbolos é uma dor de cabeça unicode-math
. :-(
Mas há uma saída.:-)
\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}
A sintaxe para \NewNegatedCommand
é
\NewNegatedCommand{\foo}{<code>}
onde \foo
está o símbolo da relação a ser negado. Isso define a combinação \not\foo
e o comando \notfoo
.
Aqui eu uso um pequeno kern para evitar o choque.
A propósito, isso parece ser um bug no XeTeX for \mathoverlayaccent
, porque a combinação \not\models
funciona em LuaLaTeX (embora dando espaçamento errado), o que poderia ser curado com
\NewNegationCommand{\models}{\mathrel{\notaccent\models}}
mas o resultado não é tão satisfatório
A solução \altnot
funciona com XeLaTeX e LuaLaTeX.
Responder2
Não pergunte por que, mas o seguinte funciona (que basicamente faz uma expansão manualmente):
\documentclass{article}
\usepackage{unicode-math}
\NewNegationCommand{\models}{\mathrel{\not⊧}}
\begin{document}
$a\models b$
$a\notmodels b$
\end{document}