![从 FakeBold 创建新字体](https://linux22.com/image/473247/%E4%BB%8E%20FakeBold%20%E5%88%9B%E5%BB%BA%E6%96%B0%E5%AD%97%E4%BD%93.png)
fontspec 包提供了一种FakeBold=1.5
创建具有各种粗细的假粗体的方法。它工作得很好,只是我觉得 Okular 中的抗锯齿效果不太好(我的理解是它为形状添加了轮廓,然后我猜它会扰乱锯齿)因为我希望我的文档在任何查看器上都能很好地打印,所以我想将这种假字体导出为正确的字体。我该怎么做?
如果有帮助的话,我需要创建一个半粗体来NimbusSanL-ReguItal
:
\newfontface\mySemibold{NimbusSanL-ReguItal.ttf}[
FakeBold=1.8,
]
平均能量损失
\documentclass[11pt]{article}
\usepackage{fontspec}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{txfonts}
\renewcommand{\familydefault}{\sfdefault}
%% See also "Choosing additional NFSS font faces" for a cleaner solution
%% Downloaded here https://github.com/SufficientlySecure/document-viewer-fontpack/blob/master/font-sources/ghostscript%20urw/NimbusSanL-Regu.ttf
\newfontface\mySemibold{NimbusSanL-ReguItal.ttf}[
FakeBold=1.8,
]
\begin{document}
Here is a test
{\mySemibold Here is a test} % <-- I want to create a font for this
\textbf{Here is a test}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:
编辑
我尝试使用 Font Forge,但收效甚微。该工具使用起来很简单,但效果并不好。如果我尝试在 regulItal 和 BoldItal 两种字体之间进行插值,某些字形会得到很好的转换……而其他一些,比如,则a
只是垃圾。
我也尝试选择字形并执行Element > Style > Change weight
,结果更好但也不完美(例如参见弯曲的边缘):
不知道我是否做错了什么,但我现在无法重现正在FakeBold
发生的事情。
答案1
你愿意使用 FontForge 字体编辑器吗?如果你使用的字符数量不多,这并不难。
尽管 FontForge 能够改变字形粗细,但我发现它的算法并不令人满意。相反,fontspec
当它描画字形轮廓时,您可以执行正在执行的操作。我喜欢这个结果。
将字体加载到 FontForge,选择字形,然后将其复制到背景。然后使用菜单元素 > 扩展笔划。您不需要它提供的所有功能。只需查看长轴和短轴的数字即可。
这会将字形转换为轮廓形状(空心)。将背景(原始字形)复制到前景(空心轮廓),然后使用元素 > 重叠 > 删除重叠。您可能还希望执行常规任务,例如添加极值、简化、四舍五入为整数。
虽然这本质上是一个图形艺术问题,但它受到了启发fontspec
。几周前我问过(这里)这是怎么做的。
请注意,扩展后的字形的最低点将低于基线,最高点将高于上升点,宽度将比以前更大。如果您愿意,您可以缩放/移动,但对于小的更改来说可能没有必要。
顺便说一句:FakeBold 实际上并不创建可提取的字形轮廓。它在创建 PDF 期间动态更改现有字形。如果您从 PDF 中提取字形,它们将与原始字体相同。
答案2
好吧,我最终将@rallg 和@marcel-krüger 的精彩回答改编成了一个脚本。这个脚本其实相当简单,基本上是这样的:
font = fontforge.open(filename)
for glyph in set(font):
font[glyph].foreground = (font[glyph].foreground.stroke("circular", 40)
+ font[glyph].foreground).removeOverlap().addExtrema().simplify().round()
font.generate(out_filename)
但我还是创造了脚本这样我们就可以轻松地从命令行使用它。如果你有 nix,你可以运行:
$ nix run github:tobiasBora/make-font-bolder -- --size 30 YourInputFont.ttf YourOutputFont.ttf
或者安装fontforge
并运行make-font-bolder
pyhon 脚本。请参阅文档以-h
使用不同的方法/笔触形状等。结果: