![使用 STIX Math 与 xelatex 和 lualatex 时出现的问题](https://linux22.com/image/416516/%E4%BD%BF%E7%94%A8%20STIX%20Math%20%E4%B8%8E%20xelatex%20%E5%92%8C%20lualatex%20%E6%97%B6%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AE%E9%A2%98.png)
这个 MWE 在 lualatex 和 xelatex 中编译良好。
\documentclass{article}
\usepackage{unicode-maths}
\setmainfont{STIX}
\setmathfont{STIX Math Regular}
\newfontface{\chaptitlefont}{STIX-Bold}[Scale=1.6]
\newfontface{\sectionfont}{STIX-Bold}[Scale=1.4]
\newfontface{\subsectionfont}{STIX-Bold}[Scale=1.2]
\setmonofont{InconsolataN}[Scale=MatchLowercase]
\begin{document}
This is a test.\\
{\chaptitlefont Chapter title}\\
{\sectionfont Section font}\\
\(
\cos^2\theta+\sin^2\theta=1
\)\\
\(\mathbf{x^2+y^2=1}\).\\
\verb|Where|
\end{document}
它给出以下警告信息。
Package unicode-math Warning: The first font loaded by unicode-math must be an
(unicode-math) OpenType Math font (with script=math). If you
(unicode-math) simply want ‘the default’ before loading
(unicode-math) supplementary fonts over the top for certain
(unicode-math) ranges, use:
(unicode-math) \setmathfont{latinmodern-math.otf}
它没有使用 STIX Math,而是使用 latinmorder-math.otf,正如在 lulatex 生成的日志文件末尾看到的那样:
<c:/texlive/2020/texmf-dist/fonts/opentype/public/inconsolata/InconsolataN-Regul
ar.otf><c:/texlive/2020/texmf-dist/fonts/opentype/public/stix/STIX-Bold.otf><c:/
texlive/2020/texmf-dist/fonts/opentype/public/lm-math/latinmodern-math.otf><c:/t
exlive/2020/texmf-dist/fonts/opentype/public/lm-math/latinmodern-math.otf><c:/te
xlive/2020/texmf-dist/fonts/opentype/public/stix/STIX-Regular.otf><c:/texlive/20
20/texmf-dist/fonts/opentype/public/stix/STIX-Bold.otf><c:/texlive/2020/texmf-di
st/fonts/opentype/public/stix/STIX-Regular.otf>
它显示有关 STIX Math 的警告:
Package fontspec Warning: Font "STIXMathRegular" does not contain requested
(fontspec) Script "Math".
如果我在 STIX Math 之前将数学字体设置为 latinmodern-math,如下面的 MWE 所示,它可以编译成功。
\documentclass{article}
\usepackage{unicode-math}
\setmainfont{STIX}
\setmathfont{latinmodern-math.otf}
\setmathfont{STIX Math Regular}
\newfontface{\chaptitlefont}{STIX-Bold}[Scale=1.6]
\newfontface{\sectionfont}{STIX-Bold}[Scale=1.4]
\newfontface{\subsectionfont}{STIX-Bold}[Scale=1.2]
\setmonofont{InconsolataN}[Scale=MatchLowercase]
\begin{document}
This is a test.\\
{\chaptitlefont Chapter title}\\
{\sectionfont Section font}\\
\(
\cos^2\theta+\sin^2\theta=1
\)\\
\(\mathbf{x^2+y^2=1}\).\\
\verb|Where|
\end{document}
它在 xelatex 和 lualatex 上都可以很好地编译。我在 Lualatex 中收到以下警告。
Package fontspec Warning: Font "STIXMathRegular" does not contain requested
(fontspec) Script "Math".
Package fontspec Info: Could not resolve font "STIXMathRegular/B" (it probably
(fontspec) doesn't exist).
unicode-math 仍然会给出警告,第一个字体必须是开放类型的数学字体。但是,从日志文件的最后一部分来看,它似乎正在使用 STIX Math。
<c:/texlive/2020/texmf-dist/fonts/opentype/public/inconsolata/InconsolataN-Regul
ar.otf><c:/texlive/2020/texmf-dist/fonts/opentype/public/stix/STIX-Bold.otf><c:/
texlive/2020/texmf-dist/fonts/opentype/public/stix/STIXMath-Regular.otf><c:/texl
ive/2020/texmf-dist/fonts/opentype/public/stix/STIX-Regular.otf><c:/texlive/2020
/texmf-dist/fonts/opentype/public/stix/STIX-Bold.otf><c:/texlive/2020/texmf-dist
/fonts/opentype/public/stix/STIX-Regular.otf>
对于 xelatex,我可以使用 Adobe Acrobat Reader 确认使用了 stix math。发生了什么?
如果之前 xelatex 发现 STIX Math 不可用,那么在加载 latinmodern-math 后它是如何变得可用的?为什么它仍然显示这些警告消息?
我再次收到错误消息
Package fontspec Info: Could not resolve font "STIXMathRegular/B" (it probably
(fontspec) doesn't exist).
打印了粗体版的数学内容。我也没有检测到任何粗体字体替换。从 lualatex 生成的日志文件的最后一部分可以看出,它没有使用除 stix 或 inconsolata 之外的任何字体。这里发生了什么?
答案1
Khaled Hosny 的 XITS 和 XITS Math 是 STIX 的分支,修复了其错误,并具有相同的字形。虽然 STIX Two 也可以作为替代品,但它是一种明显不同的字体,可能符合您的要求。例如,它与使用 STIX 排版的期刊的内部风格不匹配。
作为额外奖励,XITS 提供粗体数学字体,可unicode-math
自动加载。如果您使用\boldmath
或\boldsymbol
,XITS Math 将立即可用。
\defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX }
\setmainfont{XITS}[Scale=1.0]
\setmathfont{XITS Math}
答案2
使用
\documentclass{article}
\usepackage{unicode-math}
\setmainfont{STIX Two Text}
\setmathfont{STIX2Math.otf}
[...]
STIX (one) 字体中缺少脚本定义“math”。当然,这不是什么大问题:您可以忽略警告。但是,使用 STIX2 更有意义。