想要稍微加深字体

想要稍微加深字体

我知道我的描述可能存在误导,所以这是一个修改后的问题。我想让“dog”比普通文本稍微暗一点。我不希望它像“fox”一样暗。我正在使用带有 lualatex 的 fontspec。

我想将一种字体的斜体与另一种略暗的字体相匹配。我可以用 FakeBold 做到这一点吗?在下面的例子中,“dog”和“fox”一样暗,但我只想让它稍微暗一点。

(这里仅使用 GentiumPlus 作为示例。它不是我的实际字体。)

\documentclass[12pt]{article}
\usepackage{fontspec}

\setmainfont{GentiumPlus}

\newfontfamily{\fbgentium}{GentiumPlus}[%
  ItalicFeatures={FakeBold=1.5},
  Scale = MatchLowercase]

% Want this to be just slightly dark
\newfontfamily{\ltgentium}{GentiumPlus}[%
  ItalicFeatures={FakeBold=1.05}, % specify a small amount here (tried 0.05)
  Scale = MatchLowercase]

\begin{document}
\itshape
The quick brown {\fbgentium fox}
jumps over the lazy {\ltgentium dog.}
\end{document}

答案1

我刚刚将问题 #498 提交到了 latex3/fontspec 的 GitHub 页面。链接到 SE 上的这个帖子。当他们回复我时,我会在这里发表评论。同时,解决方法(适用于 lualatex):

在大多数情况下,尤其是对于正常或接近正常大小的文本,粗细的视觉外观与垂直字干的关系比与水平字干的关系更密切。这是因为大多数字符的垂直字干都较粗。

fontspec的设置效果FakeStretch很好。它所做的只是水平缩放,这是一个简单的线性变换,并且尽可能没有错误。因此,对于较小的权重变化,我FakeStretch现在会使用,然后等待 的解决方案FakeBold

如果您还必须更改水平字干的粗细,则无法通过 来实现FakeStretch。但如果有必要,您可以使用 增加字体大小ScaleAgain并用 值进行补偿FakeStretch

ScaleAgain相关说明:我使用和的组合FakeStretch来创建合成小写字母,用于没有小写字母的字体。虽然不完美,但还不错。

答案2

TeX 引擎 [XeTeX] 和 [LuaTeX with luaotfload] 都支持引擎实现的embolden=decimal_numberOpenType 字体字体功能。PDF 标准为封闭曲线定义了两种基本的绘制例程:fillstrokefill例程仅在封闭曲线内插入墨水,而 stroke 用线绘制曲线,必须声明其宽度。默认情况下,字体的字母绘制仅由fill例程完成。当设置了引擎相关的字体功能时embolden=decimal number,所用字体的字母由两个例程绘制:fillplusstroke并且例程的线宽stroke设置为decimal_number/100 em

例如,您可以尝试使用xetex

\font\fa=[lmroman10-regular]
\font\fb=[lmroman10-regular]:embolden=1.7

\fa Default: only fill is used.

\fb Special: fill plus stroke is used.

\bye

LaTeX fontspec 包在内部将其特定语法转换FakeBold=decimal numberembolden=decimal_number字体功能。

为了更清楚地说明填充和描边程序的工作原理,我添加了以下图像:

填充和描边

相关内容