该网站上有几个\boldmath
关于unicode-math
问题。示例 1下面显示,\boldmath
通常不适用于带有 MATH 表的 unicode 字体,除非有特定的粗体版本的数学字体。到目前为止,除了 XITS Math 之外,我还没有找到任何字体的粗体版本;据我所知,Lucida 也有一个,但它不是免费的。如何使用 unicode-math 设置 \boldmath 字体?提供了一个仅适用于 XeLaTeX 的丑陋解决方案。由于我正在使用 LuaLaTeX,所以我正在寻找其他(更漂亮的)东西。
使用 unicode-math 的粗体斜体数学包含使用 unicode 字体使其工作的解决方案没有正确的数学表。该解决方案也适用于字体和一个合适的数学表,只要你将数学字体替换为斜体文本字体(见示例 2)。如示例所示,重音符号 ( \hat
) 在这种情况下看起来不太好。
因此最好的解决方案是:
- 普通的非粗体数学符号应使用 TeX Gyre Pagella Math 排版
\boldmath
数学应该使用粗体斜体文本字体 TeX Gyre Pagella Bold Italic 排版
我尝试过示例 3下面,但在这种情况下,文本和数学字体似乎不能一起工作,因为积分符号和其他一切都会中断。
最后我尝试示例 4玩弄version=bold
,但奇怪的是,这使得全部数学粗体。这是一个错误吗?
有人能帮我实现这个功能吗?
% !TeX program=luatex
\documentclass{article}
\usepackage{fontspec,amsmath}
\setmainfont[Ligatures=TeX]{TeX Gyre Pagella}
\usepackage{unicode-math}
\newcommand\mytest{
\[ \hat f(t) = \int_0^t \hat f'(x)\, dx \]
{\boldmath \[ \hat f(t) = \int_0^t \hat f'(x)\, dx \]}
}
\begin{document}
Example 1:
\setmathfont{TeX Gyre Pagella Math}
\mytest
Example 2:
\setmathfont{TeX Gyre Pagella Math}
\setmathfont[
range=\mathit/{latin,Latin,greek,Greek,num},
BoldFont=TeX Gyre Pagella Bold Italic
]{TeX Gyre Pagella Italic}
\mytest
Example 3:
\setmathfont[BoldFont=TeX Gyre Pagella Bold Italic]{TeX Gyre Pagella Math}
\mytest
Example 4:
\setmathfont{TeX Gyre Pagella Math}
\setmathfont[
version=bold,
range=\mathit/{latin,Latin,greek,Greek,num}
]{TeX Gyre Pagella Bold Italic}
\mytest
\end{document}
答案1
嗯,合理的解决方案是设置一个新的数学版本,它应该独立于正常的数学版本。
但在我看来,目前在你的用例中,让这个键发挥作用的机会并不多version
。只要只涉及真正的数学字体,它就可以正常工作,但在与range
文本字体结合时,它会出现错误,因为一个数学版本会影响另一个数学版本。
目前,我将通过加粗真实数学字体来实现粗体数学版本。在 xelatex 中,这可以使用和来完成FakeBold
(version
只要不涉及其他文本字体)。在 lualatex 中,您可以使用 pdfliteral:
\documentclass{article}
\usepackage{fontspec,amsmath}
\setmainfont[Ligatures=TeX]{TeX Gyre Pagella}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Pagella Math}
\begin{document}
\[ \hat f(t) = \int_0^t \hat f'(x)\, dx \]
\pdfliteral direct {2 Tr 0.2 w} %the second factor is the boldness
\[ \hat f(t) = \int_0^t \hat f'(x)\, dx \]
\pdfliteral direct {0 Tr 0 w}%
\end{document}
答案2
这里有一个解决方案,可以\boldmath
按需要让“自动激活粗体斜体数学”。然而,它必然依赖于Ulrike Fischer 提到存在“真正的粗体数学字体”。 (因此,无法使用 TeX Gyre Pagella Math 实现,因为没有 TeX Gyre Pagella Math Bold,正如 egreg 所指出的那样。)
据我所知,目前(2023 年 2 月 2 日)有七种具有粗体数学字体的数学字体:
- 开源字体XITSMath(已在评论中提到,包含在标准 TeX 发行版中,并在我的解决方案中使用);
- 商业字体小黄人数学(甚至包括四个重量(英文):
- 商业字体露西达·布莱特;
- 开源字体费拉数学(有多达 12 种粗细,但非常规粗细的字形覆盖范围相当不完整);
- 开源数学字体(包含在标准 TeX 发行版中,通过kpfonts-otf包裹甚至有四种粗细和一种无衬线版本);
- 开源埃瑞璜-马思字体(包含在标准 TeX 发行版中— 粗体字重目前未涵盖常规字重中存在的所有字形,例如,缺少可变大小的分隔符);并且
- 开源XCharter-数学字体(包含在标准 TeX 发行版中— 粗体粗细目前未涵盖常规粗细中存在的所有字形,例如,缺少可变大小的分隔符)。
% !TEX program = xelatex
\documentclass{minimal}
\usepackage{ifthen}
\usepackage[svgnames]{xcolor}
\usepackage[
mathit = sym, mathup = sym, mathbf = sym,
math-style = ISO, bold-style = ISO
]{unicode-math}
\setmainfont{LinLibertine_R.otf}[
ItalicFont = LinLibertine_RI.otf,
BoldFont = LinLibertine_RB.otf,
BoldItalicFont = LinLibertine_RBI.otf
]
\setmonofont{FiraMono-Medium.otf}[
Scale = 0.81,
Color = DarkBlue
]
\setmathfont{XITSMath-Regular.otf}[
BoldFont = XITSMath-Bold.otf
]
\setmathfont{XITSMath-Regular.otf}[
version = mathitVersion
]
\setmathfont{XITSMath-Regular.otf}[
version = mathbfitVersion
]
\setmathfont{XITSMath-Bold.otf}[
version = boldmathVersion
]
\setmathfont{LinLibertine_R.otf}[
range = up/{num, latin, Latin, greek, Greek},
BoldFont = LinLibertine_RB.otf
]
\setmathfont{LinLibertine_RI.otf}[
range = it/{num, latin, Latin, greek, Greek},
BoldFont = LinLibertine_RBI.otf,
NFSSFamily = mathitalic
]
\setmathfont{LinLibertine_RBI.otf}[
range = bfit/{latin, Latin, greek, Greek},
NFSSFamily = mathbolditalic
]
\setmathfont{LinLibertine_RB.otf}[
range = bfup/{num, latin, Latin, greek, Greek}
]
\newif \ifBoldMath \BoldMathfalse
\let \mathversionorig \mathversion
\renewcommand{\mathversion}[1]{%
\ifthenelse{\equal{#1}{bold}}{%
\BoldMathtrue%
}{%
\BoldMathfalse%
}%
\mathversionorig{#1}%
}
\AtBeginDocument{%
\let \mathitorig \mathit%
\renewcommand{\mathit}[1]{%
\ifBoldMath%
\textbf{%
\SetSymbolFont{__um_fam1}{boldmathVersion}{TU}{mathbolditalic}{b}{it}%
\SetSymbolFont{__um_fam2}{boldmathVersion}{TU}{mathbolditalic}{b}{it}%
\mathversion{boldmathVersion}%
\(\mathitorig{#1}\)%
}
\else%
\textit{%
\SetSymbolFont{__um_fam1}{mathitVersion}{TU}{mathitalic}{m}{it}%
\mathversion{mathitVersion}%
\(\mathitorig{#1}\)%
}%
\fi%
}%
\let \mathbfitorig \mathbfit%
\renewcommand{\mathbfit}[1]{{%
\textbf{%
\SetSymbolFont{__um_fam1}{mathbfitVersion}{TU}{mathbolditalic}{b}{it}%
\mathversion{mathbfitVersion}%
\(\mathbfitorig{#1}\)%
}%
}}%
}
\newcommand{\testUnicodeMath}{%
\bigskip
\begin{tabular}{l @{\quad}l @{\quad} l @{\quad} l @{\quad} l}
Row
& Math version/alphabet
& Regular
& Upright
& Italic \\[\medskipamount]
1
& Text
& A = 1a
& \textup{B = 2b}
& \textit{C = 3c} \\
2 &
\texttt{\textbackslash textbf}
& \textbf{A = 1a}
& \textbf{\textup{B = 2b}}
& \textbf{\textit{C = 3c}} \\
3
& \texttt{\textbackslash mathversion\{normal\}} (default)
& $A = 1a + \beta \times \Gamma \int_{-\infty}^{\infty} \frac{\mathup{d}x}{2}$
& $\mathup{B = 2b + \beta \times \Gamma}$
& $\mathit{C = 3c + \beta \times \Gamma}$ \\
4
& \texttt{\textbackslash mathversion\{bold\}}/\texttt{\textbackslash boldmath}
& \boldmath $A = 1a + \beta \times \Gamma \int_{-\infty}^{\infty} \frac{\mathup{d}x}{2}$
& \boldmath $\mathup{B = 2b + \beta \times \Gamma}$
& \boldmath $\mathit{C = 3c + \beta \times \Gamma}$ \\
5
& \texttt{\textbackslash mathbf}/\texttt{\textbackslash mathbfup}/\texttt{\textbackslash mathbfit}
& $\mathbf{A = 1a + \beta \times \Gamma \int_{-\infty}^{\infty} \frac{\mathup{d}x}{2}}$
& $\mathbfup{B = 2b + \beta \times \Gamma}$
& $\mathbfit{C = 3c + \beta \times \Gamma}$ \\
\end{tabular}%
\bigskip
\bigskip
}
\begin{document}
\testUnicodeMath
\textit{Check that everything works properly by invoking it a~second time:}
\testUnicodeMath
\textit{Check that everything works properly by invoking it a~third time:}
\testUnicodeMath
\end{document}
这将产生以下输出 - 请注意,表格行 3-5 中的“3”是斜体,与原始 LaTeX 产生的格式一致\mathit
:
答案3
Unicode 已定义粗体和粗体斜体(及其他)数学字母数字字符,涵盖拉丁字母、希腊字母和数字字符,因此它们已包含在符合标准的 OpenType 数学字体中。
以下是使用粗体范围的示例:
\documentclass{article}
\usepackage{fontspec,amsmath}
\usepackage{unicode-math}
\setmainfont[Ligatures=TeX]{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\begin{document}
\[
\hat f(t) = \int_0^t \hat f'(x)\, dx
\]
\[
\mathbf{\hat f}(t) = \int_0^t \mathbf{\hat f}'(x)\, dx
\]
\end{document}
几点说明。我记得单原子元素的重音符号存在问题,可以通过在要重音的原子前加上一个空组(例如,\hat{{}f}
如果需要的话)来解决。
此外,根据 unicode-math 文档,可以通过配置选项来确定粗体字母是否为斜体bold-style=ISO
。
答案4
有点巫术,因为这又被推到了头版。该FakeBold=
选项适用于数学字体,包括您用 加载的数学字体version=bold
。
所以:
\documentclass{article}
\usepackage{unicode-math}
\setmainfont[Ligatures=TeX]{TeX Gyre Pagella}
\setmathfont{TeX Gyre Pagella Math}
\setmathfont{TeX Gyre Pagella Math}[
version=bold,
FakeBold=1.2 ]
\usepackage{unicode-math}
\newcommand\mytest{
\[ \hat f(t) = \int_0^t \hat f'(x)\, dx \]
{\boldmath \[ \hat f(t) = \int_0^t \hat f'(x)\, dx \]}
}
\begin{document}
\mytest
\end{document}