编辑

编辑

我使用 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}

生成:

与 Libertine

哪里\argmin不是 Libertine 字体。

我还注意到,注释掉\usepackage{libertine}会给我\argmin正确的字体,但当然,Libertine 中现在不再有正常文本了:

无 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, 2nd newtxmath, 3rd libertinus,它又产生了一个编译错误:! LaTeX3 Error: Control sequence \not= already defined.

与 Libertinus

编辑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}

OpenTYpe 字体示例

原始答案

要加载 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}

在此处输入图片描述

如果出现错误,请显示您的日志文件。

相关内容