括号不同(XeLaTeX、fontspec、newtxmath、libertine)

括号不同(XeLaTeX、fontspec、newtxmath、libertine)

内部错误:错误的原生字体标志我偶然发现了 XeLaTeX/fontspec/Libertine/newtxmath 组合的另一个奇怪的问题:

\documentclass{scrartcl}
\usepackage[no-math]{fontspec}
\usepackage{libertineotf}
\usepackage{amsmath}
\usepackage[libertine]{newtxmath}

\begin{document}
    \begin{equation}
              ( \frac{1}{1}       )
         \left( \frac{1}{2} \right)
         \bigl( \frac{1}{3}  \bigr)
         \Bigl( \frac{1}{4}  \Bigr)
        \biggl( \frac{1}{5} \biggr)
        \Biggl( \frac{1}{6} \Biggr)
    \end{equation}
\end{document}

放大后的结果是:
http://img225.imageshack.us/img225/5576/bracketsv.png

在我看来,Libertine 字体用于 和(,而 CM 用于)
将上图中的右括号与fontspec未使用该包的下图进行比较:
http://img94.imageshack.us/img94/2015/brackets2.png
括号的大小正确,但 CM 再次用于数字。pdfLaTeX
libertine包产生的输出与没有 fontspec 的 XeLaTeX 相同。

答案1

这似乎依赖于 Linux Libertine,它会妨碍\left((在命令中也隐式使用\big),因此\left(会从 Libertine 中选择括号,而不是从newtxmath定义的字体中选择。

除 Linux Libertine 之外的其他字体不会出现此问题。

解决方法。在字体定义后添加以下几行:

\DeclareSymbolFont{parenthesis}{OT1}{ntxr}{m}{n}
\DeclareMathDelimiter{(}{\mathopen}{parenthesis}{"28}{largesymbols}{"00}
\DeclareMathDelimiter{)}{\mathclose}{parenthesis}{"29}{largesymbols}{"01}

我们明确要求从字体中选择括号newtxmath。但这又带来了另一个问题:数学模式(正常大小)中的括号与文本模式中的括号不同。

答案2

这似乎是 libertine 字体中的错误。使用时会将字体(用于小括号的字体)newtxmath设置为罗马字体(libertine)。出于某种原因,字体也会使用大开括号的字体,而不是正确的字体。右括号的处理是正确的。当您不使用fontspec 选项时,问题就会消失,因为在这种情况下,运算符字体被重置为。operatoroperatorlarge symbolsno-mathcmr

这个错误出现在 5.1.3 版和最新的 5.3 版字体中,4.7.5 版也存在这个问题。它运行正常。我将示例归结为以下内容(如果对我来说,这显示了 xelatex + lualatex 的问题):

\documentclass{scrartcl}
\usepackage[no-math]{fontspec}
%\setmainfont{LinLibertine_Re-4.7.5.otf} %works
\setmainfont{LinLibertine_R.otf} % fails, version 5.1.3 and 5.3
\DeclareSymbolFont{operators}{\encodingdefault}{\rmdefault}{m}{n}
\pagestyle{empty}

% without no-math the following is used:
% \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n}
% \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n}
% \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0}
% \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1}

\DeclareMathDelimiter{(}{\mathopen} {operators}{40}{largesymbols}{0}
\DeclareMathDelimiter{)}{\mathclose}{operators}{41}{largesymbols}{1}
\begin{document}
$        \Bigg( \Biggl( % libert  %without no-math: txex
         \Bigg) \Biggr) % txex    %without no-math: txex
$
\end{document}

我认为你应该向字体作者提交一个错误报告。

顺便说一句:我收到来自 xdvipdfmx 的警告,可能与此相关:

** WARNING ** agl: fix parenrightBigg --> parenright.Bigg

相关内容