我使用 Libertine 字体来显示文本和数学运算。如果我用 声明一个新运算符\DeclareMathOperator*
,则用于排版该运算符的字体不是 Libertine。例如:
\documentclass{article}
\usepackage{libertine}
\usepackage[libertine]{newtxmath}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{arg\,min}
\begin{document}
This is some text.
\begin{equation*}
x = y + \sum_{z \in \mathcal{Z}} \beta_z
\end{equation*}
\begin{equation*}
x = \argmin_{y \in Y} \bigg \{ f(y) + \frac{1}{g(y) - h(y)} \bigg\}
\end{equation*}
\end{document}
生成:
哪里\argmin
不是 Libertine 字体。
我还注意到,注释掉\usepackage{libertine}
会给我\argmin
正确的字体,但当然,Libertine 中现在不再有正常文本了:
编辑:我刚刚注意到这是 XeTeX 特有的问题。如果我使用pdflatex
而不是进行编译xelatex
,问题就会消失。然而,在我正在进行的项目中,我需要 XeTex,因此pdflatex
目前无法切换到。
编辑2:我尝试了在答案中收到的建议。
然后再次使用
\usepackage[type1]{libertine}
和,\usepackage[libertine]{newtxmath}
在 Computer Modern 中会给出正常文本,而在 Libertine 中则不会。不过,数学运算符现在在 Libertine 中。使用
\usepackage{libertinus}
before\usepackage{amsmath}
,无论是否使用\usepackage[libertine]{newtxmath}
,都会导致编译错误:! LaTeX Error: Command \dddot already defined.
反转包加载顺序可以修复错误。我的意思是我加载第一的
amsmath
和然后libertinus
,无需加载newtxmath
。在这种情况下,我得到了正确的结果\argmin
,但其余的数学运算看起来很奇怪。例如,请参见\mathcal{Z}
下面屏幕截图中的花括号。加载
amsmath
第一、libertinus
第二和newtxmath
第三个,会出现另一个编译错误:! LaTeX Error: Command '\arrowvert' already defined.
。最后一个排列是 1st
amsmath
, 2ndnewtxmath
, 3rdlibertinus
,它又产生了一个编译错误:! LaTeX3 Error: Control sequence \not= already defined.
。
编辑3:好的,感谢以下答案,我终于有了一个可以运行的版本:
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage[type1]{libertine}
\usepackage[libertine]{newtxmath}
答案1
编辑
Ulrike Fischer 发布了一个比我想到的更简单的解决方法,但我会将其留在这里,以便讨论您遇到的一些替代方案和问题。
当您使用 XeLaTeX 而不是 PDFLaTeX 进行编译时,会发生这种情况,原因是包libertine
在 XeTeX 上加载了字体的 OpenType 版本。您加载的包定义操作符字体的方式存在冲突。字体编码和字体名称不匹配会导致 XeTeX 加载默认字体。事实证明,以正确的顺序加载包可以解决这个问题。
但是,还有一些替代方案可以考虑。如果您mathastext
在之后加载libertine
,您将获得 OpenType 版本的 Libertine,而不是临时拼凑的 Type 1 字体:
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{arg\,min}
\usepackage[libertine]{newtxmath}
\usepackage{libertine}
\usepackage{mathastext}
如果您使用 检查输出pdffonts
,这将删除一半使用的字体,其中许多是 8 位的,并允许您复制和粘贴更多的字母。
我还建议libertinus
加载unicode-math
。你写道,“但其余的数学看起来很奇怪。例如,参见 \mathcal{Z} 或花括号[....]”
这就是 Libertinus Math 字体的外观,所以这是你轻松完成任务时得到的结果。但是,如果你不喜欢它的某个字母,你可以混合搭配。如果你想将字母更改\mathcal
为更像你以前使用的字母,你可以在后面添加libertinus
,
\setmathfont[range={cal,bfcal}, Scale=MatchUppercase]{Latin Modern Math}
或者你可能更喜欢
\setmathfont[range={cal,bfcal}, Scale=MatchUppercase, StylisticSet=1]{XITS Math}
如果您想要更接近原始外观,仅使用 OpenType 字体,则需要单独加载字母表,而不是通过包加载。
\documentclass{article}
\usepackage{amsmath}
\DeclareMathOperator*{\argmin}{arg\,min}
\usepackage{unicode-math}
\defaultfontfeatures{Scale = MatchLowercase}
\setmainfont[Ligatures={Common, Discretionary, TeX}, Scale=1.0]{Libertinus Serif}
\setsansfont{Libertinus Sans}
\setmonofont{Libertinus Mono}
\setmathfont{TeX Gyre Termes Math}
\setmathfont[range={up,it,bfup,bfit,sfup,sfit,bfsfup,bfsfit,tt}]{Libertinus Math}
\setmathfont[range={cal,bfcal}, Scale=MatchUppercase]{Latin Modern Math}
\begin{document}
This is some text.
\begin{equation*}
x = y + \sum_{z \in \mathcal{Z}} \beta_z
\end{equation*}
\begin{equation*}
x = \argmin_{y \in Y} \bigg \{ f(y) + \frac{1}{g(y) - h(y)} \bigg\}
\end{equation*}
\end{document}
原始答案
要加载 Type 1 字体,即使在 XeTeX 或 LuaTeX 上,也可以使用
\usepackage[T1]{fontenc}
\usepackage[type1]{libertine}
由于您使用的是 XeTeX,请考虑使用libertinus
包而不是libertine
和\newtxmath
。这将unicode-math
使用 Libertinus Math 字体加载。
答案2
使用 T1 编码和 xelatex 不是一个好主意。参见https://tex.stackexchange.com/a/470987/2388。
更改顺序对我有用:
\documentclass{article}
\usepackage{amsmath}
\usepackage[libertine]{newtxmath}
\usepackage{libertine}
\DeclareMathOperator*{\argmin}{arg\,min}
\begin{document}
This is some text. arg min
\begin{equation*}
x = y + \sum_{z \in \mathcal{Z}} \beta_z
\end{equation*}
\begin{equation*}
x = \argmin_{y \in Y} \bigg \{ f(y) + \frac{1}{g(y) - h(y)} \bigg\}
\end{equation*}
\end{document}
如果出现错误,请显示您的日志文件。