使特定数学符号更粗

使特定数学符号更粗

我正在尝试弄清楚如何对我的文档进行精细的排版控制。我一直在研究这个 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

对你的问题的最终答案是:当你对现有字体的外观不满意时,就设计你自己的字体吧!但字体设计是一项艰苦而繁琐的工作,考虑到你生活中的其他职责,你可能没有那么多时间。

有一个快捷方式:当你想混合不同字体的字符时,你可以创建一个虚拟字体并使用它。有关如何执行此操作的提示,请参阅此问题:如何创建虚拟字体?

相关内容