答案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
\setmathfont
Latin 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]
选项可以防止这种情况发生,其他建议会加载提供重新声明字符的字体。