unicode-math 将 \not 替换为数字“6”

unicode-math 将 \not 替换为数字“6”

以下 MWE 产生附图:

\documentclass{article}

\usepackage{fontspec}
\usepackage{amsmath,amssymb}
\usepackage{unicode-math}

\begin{document}
With \LaTeX{} commands:
\begin{gather*}
  A \not= B\\
  A \not\le B\\
  A \not\lesssim B\\
  A \not\approxeq B
\end{gather*}

With Unicode characters:

\begin{gather*}
  A \not= B\\
  A \not≤ B\\
  A \not≲ B\\
  A \not≊ B
\end{gather*}
\end{document}

number 6

为什么被\not取代6

我尝试使用 Unicode combining long solidus overlay,但根本不起作用:

\begin{gather*}
  A ≠ B\\
  A ≰ B\\
  A ≴ B\\
  A ≊̸ B
\end{gather*}

答案1

如果存在适合组合\not+ unicode 符号的 unicode 字符,则可以添加所需的声明,它们将像\not+ 命令的组合一样工作。但在我看来,没有 \not\approxeq,所以这里需要一个后备,比如与斜线的组合。在这种情况下,您会得到 6,因为 unicode-math 中似乎有一个错误:它丢失了 unicode-math-tables 中 \not 的定义。这似乎是一种解决方法(但在我看来,看起来并不完美)。

\documentclass{article}

\usepackage{fontspec}
\usepackage{amsmath,amssymb}

\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\ExplSyntaxOn
\cs_gset:cpn { not≤ }    { \nleq }
\cs_gset:cpn { not≲ }    { \not\lesssim }
%Fallback bug correction:
\__um_sym:nnn {"00338}{\__um_oldnot:                     }{\mathaccent}
\ExplSyntaxOff

\begin{document}
With \LaTeX{} commands:
\begin{gather*}
  A \not= B\\
  A \not\le B\\
  A \not\lesssim B\\
  A \not\approxeq B
\end{gather*}

With Unicode characters:

\begin{gather*}
  A \not= B\\
  A \not≤ B\\
  A \not≲ B\\
  A \not≊ B
\end{gather*}
\end{document}

enter image description here

编辑

如果使用关键字,就会得到更好的“后备” overlay这只适用于 lualatex:这里以 \approxeq 为例:

\documentclass{article}

\usepackage{fontspec}
\usepackage{amsmath,amssymb}

\usepackage{unicode-math}

%\setmathfont{Cambria Math}

\newcommand\napproxeq{\Umathaccent overlay fixed  7\symoperators "00338 \approxeq}

\begin{document}
$A \napproxeq B $

$A \not\approxeq C $

\end{document}

enter image description here

我会将其添加到unicode数学的问题跟踪器中。

答案2

本地重新定义\not为堆栈。

\documentclass{article}

\usepackage{fontspec}
\usepackage{amsmath,amssymb}
\usepackage{unicode-math}
\usepackage{stackengine}
\AtBeginDocument{\renewcommand\not[1]{%
  \mathrel{\ensurestackMath{\stackengine{0pt}{#1}{\mkern1mu/}{O}{c}{F}{T}{L}}}}%
}

\begin{document}
With \LaTeX{} commands:
\begin{gather*}
  A \not= B\\
  A \not\le B\\
  A \not\lesssim B\\
  A \not\approxeq B
\end{gather*}

With Unicode characters:

\begin{gather*}
  A \not= B\\
  A \not≤ B\\
  A \not≲ B\\
  A \not≊ B
\end{gather*}
\end{document}

enter image description here

为了进行比较,这是原始的未修复代码。

enter image description here

相关内容