Xelatex 和 LuaLatex 错误地渲染公式

Xelatex 和 LuaLatex 错误地渲染公式

以下公式在 XeLatex 和 LuaLatex 中呈现错误。

\documentclass[]{article}
\usepackage{fontspec}
 \begin{document}

    \begin{equation}
    {\mathbf{\dot y}},\mathbf{\tilde y}
    \end{equation}

\end{document}

有什么解决办法吗?除了fontspec,我还有许多包裹。 在此处输入图片描述

PS:pdfLatex 不支持 fontspec

答案1

当您加载字体规范时,它会尝试将数学字母(\mathbf等)调整为主文档字体。例如,如果您将 Arial 设置为主文档:

\documentclass[]{article}
\usepackage{fontspec}
\setmainfont{Arial}

\begin{document}

    $\mathit{x} = \mathbf{y}$

\end{document}

你得到

在此处输入图片描述

遗憾的是,这会产生副作用,破坏参数中的重音,因为新的数学字母使用与标准数学运算符字体不同的编码,并且\dot定义为里面 \mathbf\mathbf它尝试使用不存在的字形。

使用该no-math选项可以解决点重音的问题,但也无法适应数学字母:

\documentclass[]{article}
\usepackage[no-math]{fontspec}
\setmainfont{Arial}

\begin{document}

    $\mathbf{\dot y}, \dot{\mathbf{y}}, \mathit{x} = \mathbf{y}$

\end{document}

在此处输入图片描述

如果您想保留数学字母,您可以重新定义\dot命令(\mathalph无论如何我认为使用是错误的):

\documentclass[]{article}
\usepackage{fontspec}
\setmainfont{Arial}

\AtBeginDocument{\DeclareMathAccent{\dot}     {\mathord}{legacymaths}{95}}
 \begin{document}

 $ \dot{y}, \mathbf{\dot y}, \dot{\mathbf{y}} $

\end{document}

这给出了正确的点,但里面不是粗体\mathbf(这不是一个好的语法,所以与正确的输入相比,你没有获得太多):

在此处输入图片描述

要调整这一点,您可以添加粗体点的定义:

\documentclass[]{article}
\usepackage{fontspec}
\setmainfont{Arial}

\AtBeginDocument{\DeclareMathAccent{\dot}     {\mathord}{legacymaths}{95}}
\DeclareSymbolFont{boldlegacymaths}{OT1}{cmr}{bx}{n}
\DeclareMathAccent{\bolddot}     {\mathord}{boldlegacymaths}{95}
 \begin{document}

  $
    \mathbf{\dot y}, \dot{\mathbf{y}}, \bolddot{\mathbf{y}}
  $

\end{document}

在此处输入图片描述

使用 unicode-math 时,您最好避免在数学字母表内使用重音命令,如果您想要粗体点,则应切换到文本模式:

\documentclass[]{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmainfont{Arial}

\begin{document}

  $
   \dot{\mathbf{y}}, \mathbf{\dot{y}}, \text{\normalfont\textbf{y^^^^0307}}
  $
\end{document}

在此处输入图片描述

答案2

在您的示例中,删除\usepackage{fontspec}是获得正确结果的一种方法。但我想您需要保留该包。您有几种选择:

  • 将选项添加[no-math]fontspec包中
  • 正如 Johannes_B 建议的那样,使用lmodern
  • 使用包,并设置定义和重音符号unicode-math的主数学字体。使用指令设置数学字体。如果您没有明确设置数学字体(通过),将使用。这个特定的数学字体\dot\tilde\setmathfont\setmathfontLatin Modern Math定义\dot\tilde强调。

前两个建议在 XeLaTeX 和 LuaLaTeX 上都能正常工作。第三个建议在 LuaLaTeX 上也能正常工作,但使用 XeLaTeX 时,它会错误地放置和\dot\tilde音符y,至少在我尝试的字体 () 上是这样的。但是,如果将和写成和,Latin Modern Math则 XeLaTeX 特有的重音符放置问题会自动消失。无论如何,建议将和的参数括起来-- 以及其他重音符生成指令,例如-- 。\dot{y}\tilde{y}\dot y\tilde y\dot\tilde\hat

可能还有其他方法可以获得正确的口音。

至于错误的原因:在您的示例中,“fontspec”重新声明了许多数学重音和符号,该[no-math]选项可以防止这种情况发生,其他建议会加载提供重新声明字符的字体。

相关内容