我读到过一篇文章,其中fontspec
默认使用 Latin Modern,因此我认为使用 LuaLaTeX 时不再需要加载该包。但今天我注意到,字距调整似乎在 amsmath 的命令lmodern
中不起作用:\operatorname
\documentclass{scrartcl}
\usepackage{fontspec}
%\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{microtype}
\begin{document}
$\operatorname{Wait}, \text{Wait}$
\end{document}
这将在我的计算机上产生以下输出:
当明确加载时lmodern
(删除第 4 行的注释符号),将应用字距调整\operatorname
,并且两个单词看起来相同。
虽然我已经找到了解决方案,但我想了解这里发生了什么。特别是,在将 latin modern 与 LuaLaTeX 一起使用时还需要考虑其他事项吗?
答案1
您应该fontspec
使用该no-math
选项加载。是的,您还应该加载lmodern
使用 Latin Modern(旧版)数学字体。如果没有它,数学字体将是通常的 Computer Modern 字体。
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{lmodern}
\usepackage[no-math]{fontspec}
\usepackage{microtype}
\begin{document}
$\operatorname{Waitfi}, \mathrm{Waitfi}$
\end{document}
我还添加了连字符,只是为了显示它有效。
这是输出pdffonts
:
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
VQXSIW+LMRoman10-Regular Type 1 Custom yes yes no 4 0
HQUSZE+LMMathItalic10-Regular Type 1 Custom yes yes no 5 0
JFRMQG+LMRoman10-Regular CID Type 0C Identity-H yes yes yes 6 0
答案2
我认为这是因这里描述的问题引起的OpenType 数学系列中不使用连字?。数学模式中不使用开放式字体的连字符和字距调整。您可以按照 egreg 的建议切换到“经典”数学字体。使用 luatex,您还可以在基本模式下加载运算符字体:
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}[Renderer=Basic]
\newfontfamily\latinmathoperators{Latin Modern Roman}[Renderer=Basic]
%
\makeatletter
\AtBeginDocument{%
\latinmathoperators
\DeclareSymbolFont{operators}{EU2}\f@family\mddefault\updefault
\SetSymbolFont{operators}{normal}{EU2}\f@family\mddefault\updefault
\normalfont}
\makeatother
\begin{document}
Waitffi
$\operatorname{WAitffi} \mathrm{WAitffi}\text{WAitffi}$
\end{document}
添加
使用 unicode-math 您还可以定义使用基本模式的特定字体:
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfontface\mathrmoperator{Latin Modern Roman}[Renderer=Basic]
\setoperatorfont\mathrmoperator
\begin{document}
$\operatorname{Waitffi} = a_{\operatorname{Waitffi}}$
$\mathrmoperator{Waitffi} = a_{\mathrmoperator{Waitffi}}$
$\mathrm{Waitffi} = a_{\mathrm{Waitffi}}$
\end{document}
不要在此类命令的参数中使用数学符号,例如\delta
或\int
。由于 Latin Modern Roman 不是数学字体,因此它们会丢失。