我正在尝试弄清楚如何对我的文档进行精细的排版控制。我一直在研究这个 pdf但我似乎无法弄清楚如何将诸如“()、+、-、=、...”之类的符号设置为轻微地比其他数学更重。这可能吗?我还知道 unicode 数学破坏了其他软件包的很多选项,但我用它来为拉丁和希腊字符实现不同的字体。如果我可以在没有它的情况下实现同样的事情,我愿意消除对 unicode 的依赖,但我更喜欢一个考虑到这个包的解决方案。
答案1
这里有两个问题:第一是找到一种真正包含您想要的字形的字体,第二是让它们出现在您想要的位置。
以下是当前可用的提供多种粗细的 OpenType 数学字体:
- Lucida Bright Math 提供 Regular 和 Demibolt
- Minion Math 提供常规、中等、半粗体和粗体(每种有五种光学尺寸)
- XITS Math 提供常规和粗体
假设您使用 Minion Math Regular 作为主要数学字体,并决定 Minion Math Semibold 以您喜欢的方式“略微”加粗(我猜比粗体数学版本更浅?)。然后,如果您希望给定符号显示为半粗体自始至终您的文档,您可以在序言中使用range
的键\setmathfont
,例如如下所示:
% Ignoring optical sizes
\setmathfont{MinionMath-Regular.otf}
\setmathfont[
range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 } % +-<>={}|()
]{MinionMath-Semibold.otf}
您可以在 中找到其他 Unicode 插槽或范围的代码unimath-symbols.pdf
。
如果你想应用效果仅限某些部分文档,每次你都必须重新映射字符。你可以这样做:
\documentclass{article}
\usepackage{unicode-math}
\setmathfont{MinionMath-Regular.otf}
\NewDocumentCommand\applysemi{}{%
\setmathfont[
range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 }
]{MinionMath-Semibold.otf}%
}
\NewDocumentCommand\removesemi{}{%
\setmathfont[
range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 }
]{MinionMath-Regular.otf}%
}
\begin{document}
$ a + ( b - c ) = x $
\applysemi
$ a + ( b - c ) = x $
\removesemi
$ a + ( b - c ) = x $
\end{document}
如果您使用的是 XeLaTeX,您还可以使用键FakeBold
来扭曲缺少给定设计粗细的字体的外观,如fontspec
文档第 9.3 节中所述。例如,对于 Cambria Math,您可以这样做
\setmathfont[
range = { "002B,"2212,"003C,"003E,"003D,"007B,"007D,"007C,"0028,"0029 } ,
FakeBold = 2
]{Cambria Math}
然而,这并不是真正值得推荐的:结果在美学上无法与正确设计的字体相匹配。
答案2
对你的问题的最终答案是:当你对现有字体的外观不满意时,就设计你自己的字体吧!但字体设计是一项艰苦而繁琐的工作,考虑到你生活中的其他职责,你可能没有那么多时间。
有一个快捷方式:当你想混合不同字体的字符时,你可以创建一个虚拟字体并使用它。有关如何执行此操作的提示,请参阅此问题:如何创建虚拟字体?