为什么\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。