我知道我的描述可能存在误导,所以这是一个修改后的问题。我想让“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_number
OpenType 字体字体功能。PDF 标准为封闭曲线定义了两种基本的绘制例程:fill
和stroke
。fill
例程仅在封闭曲线内插入墨水,而 stroke 用线绘制曲线,必须声明其宽度。默认情况下,字体的字母绘制仅由fill
例程完成。当设置了引擎相关的字体功能时embolden=decimal number
,所用字体的字母由两个例程绘制:fill
plusstroke
并且例程的线宽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 number
为embolden=decimal_number
字体功能。
为了更清楚地说明填充和描边程序的工作原理,我添加了以下图像: