(unicode-math veya newtxmath) + \ newcommand {\ nmodels} {\ not \ models} + $\not\models$ = durak

Sep 16 2020

Girdiyi besleme

\RequirePackage{ifthen}
\RequirePackage{ifxetex,ifluatex}
\newif\ifxetexorluatex
\ifxetex
  \xetexorluatextrue
\else
  \ifluatex
    \xetexorluatextrue
  \else
    \xetexorluatexfalse
  \fi
\fi
\documentclass{standalone}
\ifxetexorluatex
\usepackage{unicode-math}
\else
\usepackage{newtxmath}
\fi
\newcommand{\nmodels}{\not\models}%%% or \providecommand, or \providecommand* instead of \newcommand; the effect is the same.
\begin{document}
\(\nmodels\) %%% or \(\not\models\); the effect is the same.
\end{document}

herhangi birine pdflatex, xelatexya da lualatexnedenleri sonsuz bir döngü. Peki, XeLaTeX + unicode-math, \ nin tanımlanmışsa sonsuz döngüye girerse? \notinyerine kullanabilirsiniz \not\in, ancak şeklini seviyorsanız (şeklinden \modelsçok \vDash), olumsuzlanmış bir biçimini istiyorsanız ve onu adlandırmak istiyorsanız ne yaparsınız \nmodels? Şekli \nvDashyüzden, bu ikisini de kullanmak tavsiye edilmez, farklı \modelsve \nvDashaynı belgede. MnSymbols'u (tamamını) kullanmak söz konusu değil: hala hatalar olabilir (10 yıl önce olduğunu biliyordum ve o zaman kullanmayı bıraktım), epeyce sembolü değiştiriyor ve NewTX yazı tipleriyle çatışıyor.

Yanıtlar

4 egreg Sep 16 2020 at 15:10

Şu anki uygulaması, (Xe | Lua) LaTeX ile \nottemelde aynı şeyi pdflatexyapıyor unicode-math.

Daha doğrusu, bir \notsonraki jetonu alır, diyelim \foove önce \notfootanımlı olup olmadığını kontrol eder ; test başarılı olursa \notfookullanılır. Aksi takdirde, sonraki kontrol \nfootanımlı olup olmadığıdır . Yine bu test başarılı olursa \nfookullanılır. Aksi takdirde LaTeX yapar \n@tch@r\foo.

Şimdi neden sonsuz bir döngü başlatılır bkz: \nmodelsyok \not\models; beri \nmodelstanımlanır, öyle ki, kullanılır \not\models...

Sen uygulayarak sorunu önleyebilirsiniz \notiçin \relax(ne umuduyla \notrelaxne de \nrelaxolası değildir ki, tanımlanmıştır).

\documentclass{standalone}
\usepackage{iftex}
\iftutex
  \usepackage{unicode-math}
\else
  \usepackage{newtxmath}
\fi

\newcommand{\nmodels}{\not\relax\models}%

\begin{document}

\(\nmodels\)

\(\not\models\)

\end{document}

Her neyse, bu özellikle reddetmek için iyi bir yol değil \models. Aşağıdakilerle karşılaştırın.

\documentclass[border=4]{standalone}
\usepackage{iftex}
\iftutex
  \usepackage{unicode-math}
\else
  \usepackage{newtxmath}
\fi
\usepackage{centernot}

\newcommand{\nmodels}{\centernot\models}%

\begin{document}

\(\nmodels\)

\(\not\models\)

\end{document}

4 Davislor Sep 16 2020 at 10:55

Tanımı \notolmadığını bakarak yarı yarıya fazla zeki oluyor \nmodelsya \notmodelsmevcut zaten.

İsmi değiştirirseniz işe yarar:

\documentclass{standalone}
\usepackage{iftex}

\iftutex
  \usepackage{unicode-math}
\else
  \usepackage{newtxmath}
\fi

%\newcommand{\aintmodel}%
  %{\mathrel{\ooalign{\(\models\)\cr\hidewidth\(\mathslash\)\hidewidth}}}

\newcommand\aintmodel{\not\models}

\begin{document}
\( \aintmodel \)
\end{document}

Bu arama, sembol her kullanıldığında gerçekleştirilir ve tanımı \nottam olarak genişletilemez, bu nedenle sembolü \letveya ile tanımlayamaz \edefve bundan kaçınamazsınız.

Bununla birlikte, \ooalignbunun yerine ile sembolü oluşturabilirsiniz . ( Bunun yerine /ile newtxmathkullanın \mathslash.)

Açıkça, unicode-mathşimdi ön eki aramalı aint.

Güncelleme

Ayrıca, aramayı engelleyerek \notadı kullanmadan da arayabilirsiniz \models. Örneğin,

\documentclass{standalone}
\usepackage{iftex}

\usepackage{unicode-math}


\newcommand\nmodels{\mathrel{\not\symbol{"22A7}}}

\begin{document}
\( \nmodels \)
\end{document}