(unicode-math hoặc newtxmath) + \ newcommand {\ nmodels} {\ not \ models} + $\not\models$ = gian hàng
Cung cấp đầu vào
\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}
bất kỳ pdflatex, xelatexhoặc lualatexnguyên nhân một vòng lặp vô hạn. Chà, trong trường hợp XeLaTeX + unicode-math đi vào vòng lặp vô hạn nếu \ nin được định nghĩa? bạn có thể sử dụng \notinthay vì \not\in, nhưng bạn phải làm gì nếu bạn thích hình dạng của \models(hơn là của \vDash), muốn một dạng phủ định của nó và muốn gọi nó \nmodels? Hình thức của \nvDashlà khác nhau, do đó, không nên sử dụng cả hai \modelsvà \nvDashtrong cùng một tài liệu. Việc sử dụng (toàn bộ) MnSymbols là điều không cần bàn cãi: nó có thể vẫn còn lỗi (tôi biết nó có cách đây 10 năm và sau đó đã ngừng sử dụng), thay đổi khá nhiều biểu tượng và xung đột với phông chữ NewTX.
Trả lời
Việc triển khai hiện tại của về \notcơ bản giống pdflatexnhư trong (Xe | Lua) LaTeX với unicode-math.
Chính xác hơn, \notlấy mã thông báo tiếp theo, nói \foovà kiểm tra đầu tiên xem đã \notfoođược xác định chưa; nếu thử nghiệm thành công, \notfoođược sử dụng. Nếu không, kiểm tra tiếp theo là liệu đã \nfoođược xác định hay chưa. Một lần nữa, nếu thử nghiệm này thành công, \nfoođược sử dụng. Nếu không thì LaTeX không \n@tch@r\foo.
Bây giờ bạn thấy lý do tại sao một vòng lặp vô hạn được bắt đầu: \nmodelsdoes \not\models; kể từ khi \nmodelsđược định nghĩa, nó được sử dụng, mà \not\models…
Bạn có thể tránh vấn đề này bằng cách áp dụng \notđể \relax(hy vọng rằng không phải \notrelaxvà cũng không \nrelaxđược xác định, đó là khó xảy ra).
\documentclass{standalone}
\usepackage{iftex}
\iftutex
\usepackage{unicode-math}
\else
\usepackage{newtxmath}
\fi
\newcommand{\nmodels}{\not\relax\models}%
\begin{document}
\(\nmodels\)
\(\not\models\)
\end{document}
Dù sao, đây không phải là một cách phủ định đặc biệt tốt \models. So sánh với những điều sau đây.
\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}
Định nghĩa của \nottrở nên quá thông minh bằng một nửa khi tra cứu xem đã tồn tại \nmodelshay \notmodelschưa.
Nó hoạt động nếu bạn thay đổi tên:
\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}
Việc tra cứu này được thực hiện bất cứ khi nào ký hiệu được sử dụng và định nghĩa của \notkhông thể mở rộng hoàn toàn, vì vậy bạn không thể xác định ký hiệu bằng \lethoặc \edefvà bỏ qua điều này.
Tuy nhiên, bạn có thể tạo biểu tượng bằng \ooalign. (Sử dụng /với newtxmaththay vì \mathslash.)
Rõ ràng, unicode-mathbây giờ cần phải tìm kiếm tiền tố aint.
Cập nhật
Bạn cũng có thể gọi \notmà không cần sử dụng tên \models, ngăn cản việc tra cứu. Ví dụ,
\documentclass{standalone}
\usepackage{iftex}
\usepackage{unicode-math}
\newcommand\nmodels{\mathrel{\not\symbol{"22A7}}}
\begin{document}
\( \nmodels \)
\end{document}