符号 \pm 低于其旁边的数字

符号 \pm 低于其旁边的数字

为什么\pm符号比旁边的数字小?这是正常现象吗?我怎样才能将其提高到与数字相同的水平?

我的发行版是 Vanilla TeX,安装还不到一周,因此它已更新。

在此处输入图片描述

\documentclass{article}

\usepackage[top=0.7in, bottom=1.2in, left=0.8in, right=0.8in]{geometry}

\usepackage{parskip}

\setlength{\parindent}{0cm}

\usepackage{amsmath}

\usepackage{unicode-math}

\usepackage{fontspec}

\usepackage[greek,english]{babel}

\setmainfont
[
    Ligatures=TeX,
    Extension=.otf,
    UprightFont=*,
    BoldFont=*Bold,
    ItalicFont=*It,
    BoldItalicFont=*BoldIt,
    Mapping=tex-text
]{GFSArtemisia}

\setsansfont[Mapping=tex-text]{GFSArtemisia.otf}

\setmathfont{latinmodern-math.otf}

\setmathfont[range=\varnothing]{Asana-Math.otf}

\setmathfont[range=\int]{latinmodern-math.otf}

\begin{document}

$$x= \pm 1$$

\end{document}

答案1

以下精简版示例重现了您遇到的定位问题:

\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\begin{document}
$x= \pm 1$
\end{document}

罪魁祸首似乎是\usepackage{unicode-math}加载 Latin Modern Math 字体的指令。如果未加载该包,则符号的定位问题\pm就会消失,因为会加载 amsfonts 集合中的字体。从更深层次的意义上讲,罪魁祸首应该称为 Latin Modern Math 字体。(另请参阅 @egreg 的回答,了解如何修复 Latin Modern Math 字体最新版本中引入的错误。)

从您的示例代码来看,加载包的原因unicode-math是为了运行指令\setmathfont[range=\varnothing]{Asana-Math.otf}。如果您可以不用这种\varnothing符号的替代形式,我建议您干脆不加载unicode-math包并删除\setmathfont指令。

在此处输入图片描述

\documentclass{article}
\usepackage{fontspec}
\begin{document}
$x= \pm 1$
\end{document}

答案2

这似乎是拉丁现代数学开发人员的一个“设计决策”(读作“错误”)。

这是证据;我在文本模式下排版字符,因此它不会受到自动数学间距或垂直移动的可能影响。

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}

\setmathfont{latinmodern-math.otf}

\newfontface{\test}{latinmodern-math.otf}


\begin{document}

{\test\char"B1 +} $x= \pm 1$

\end{document}

在此处输入图片描述

修复版本:

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}

\AtBeginDocument{%
  \let\ORIpm\pm
  \let\pm\shifteduppm
}

\makeatletter
\newcommand{\shifteduppm}{%
  \mathbin{\mathpalette\shifted@up@pm\relax}%
}
\newcommand{\shifted@up@pm}{%
  \raisebox{\depth}{$\m@th#1\ORIpm$}%
}
\makeatother

\setmathfont{latinmodern-math.otf}

\newfontface{\test}{latinmodern-math.otf}

\begin{document}

{\test\char"B1 +} $x= \pm 1$

\end{document}

在此处输入图片描述

如您所见,数学中的用法符合预期。

替代解决方案:使用\pm来自古老的 Computer Modern 的符号:

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}

\DeclareSymbolFont{oldsymbols}{OMS}{cmsy}{m}{n}
\SetSymbolFont{oldsymbols}{bold}{OMS}{cmsy}{b}{n}
\DeclareMathSymbol{\CMpm}{\mathbin}{oldsymbols}{"06}
\AtBeginDocument{\let\pm\CMpm}

\setmathfont{latinmodern-math.otf}

\newfontface{\test}{latinmodern-math.otf}

\begin{document}

{\test\char"B1 +} $x= \pm 1$

\end{document}

答案3

这是由您选择的字体决定的。如果您不喜欢这个标志,则应使用其他字体。因此,使用此字体是正常的。您需要以下行吗:

\setmathfont{latinmodern-math.otf}

也许您可以仅为 \pm 符号重新分配基本字体,就像您对 \int 所做的那样

附言:我不了解 Vanilla TeX。我的答案对于 XeLaTeX 来说是正确的,但我认为它也应该适用于 Vanilla。

相关内容