如何使字体等距?


14

假设我有一个字体的温和流行的格式(.ttf.otf,等),和我有合法权利来修改它。就目前而言,它是一种正常的字体,具有不同的字符(字形?),它们的宽度和间距都不同。我该如何将所述字体转换为等宽字体(例如,所有字符的尺寸相同,等等)?

如果可能,是否有任何自动化工具可以为您做一些猜测?(结果不一定是完美的。)字体可能很大(很多字符),并且编辑它可能很乏味。

关于这个问题的任何建议,我们将不胜感激!:)


免责声明:很抱歉,如果这被认为是一种简单的方法,但是Google对此主题的信息很少,并且对于一个不怎么处理图形或字体的程序员来说,肯定不是那么简单。另外,对不起,如果我的用语不正确...:P


您正在使用什么字体软件?Fontlab?Fontforge?
thomasrutter

Answers:


12

如果您还没有任何字体编辑软件,那么好消息是Fontforge是免费的开源软件。坏消息是它具有较高的学习曲线和不寻常的用户界面。

基本上,要使字体被视为等宽字体,每个字形都必须具有相同的宽度,直至精确到相同的单位数。这甚至包括通常应为零宽度或特定宽度的字形(例如em空格,破折号等)。

请参阅常见问题解答条目“如何将字体标记为等宽字体?”

要实际一次批量编辑所有字形的宽度,您可以转到菜单上的“度量”->“设置宽度”,但是我不希望它适用于所有字符。您可能必须手动编辑所有宽字符,例如'W','M','@'等,这样它们才不会最终重叠。并结合变音符号(打算在渲染时将变音符号与字母“合并”)可能会弄乱它们的所有位置(这很难测试您是否是美国/英国人,并且几乎从不使用它们)。

知道如何创建和编辑字体的人可以执行此任务,但仍然不是一件容易的事。


关于将字体转换为等宽字体,我有同样的问题。我知道,拼搏是不好的。我真正想要的是一种工具,该工具将1)找到最宽的字形,然后2)然后不拉伸字形,而是希望它们以该宽度的字段为中心。有没有工具可以做到这一点?
NJRandy 2014年

如果是gnu unifont,请使用@thomasrutter?(字形为8 16或16 16的位图字体)
user2284570

好答案。但是,直接从FontForge的UI进行编辑对我来说不起作用(在冻结之前,它冻结了几个小时)。相反,我使用了Python绑定。我的目标是使用等宽字体作为后备,因此紧缩和渗色不是大问题。我已经在一个单独的答案中详细介绍了所有这些内容。
克莱门特

1
当我第一次学习时,我通过编辑免费字体制作了许多mono字体。像任何自动化工具一样,它应该只是一个起点:应该根据需要调整结果。我发现Fontographer具有最快的学习曲线。选择字形,请Set WidthMetrics下拉菜单中:(如果需要变更后)设置的所有字形的一个平均宽度最后,选择Equalise Sidebearings也下Metrics菜单居中的EM-方形的字形。当然:研究其他人如何克服设计成功的固定宽度字体时遇到的困难。
Moscarda'7

7

thomasrutter提供了更多的技术答案;我将向您展示一些版式设计原则,以阻止您除非确实需要,否则不要进行自己想做的事情。

在Consolas或Courier中放大“ i”和“ m”,然后在Corbel或Verdana中放大。请注意,为了使等宽字体起作用,字母必须有多么不同。正确将字体转换为等宽字体需要大量的知识和工作。值得一提的是,任何设计师都不愿意拉伸字体,这就是为什么即使从普通字体转换为压缩字体也需要重新绘制所有字形的原因。

因此,在这里查看Consolas vs. Corbel,看看放大后的效果如何:1)字母之间的间距,2)笔触粗细的一致性以及3)每个字母如何适合其框。查看等距面(第一个)与可变面(第二个)的比较,然后看第三和第四个,以了解当您尝试拉伸和间隔使其相等时会发生什么。第四次,我让女士们挤到了75%的水平,但现在它们比Is瘦很多。使用时会很明显。

等宽字体和可变空间字体的比较

因此,简而言之:不要搞乱字体;他们比您预期的强大得多!


2
是的,正是由于Brendan指出的原因,像M那样扩展宽字形并不是一个很好的解决方案:它的垂直笔画比其他字母窄并且看起来很糟糕。您实际上必须通过选择控制点并移动它们来手动编辑字形。希望这可以使OP知道如何正确(或很好地)完成这项任务不是一件容易的事。特别是如果您想拥有一个不错的字形覆盖范围。
thomasrutter 2012年

@Brendan我认为对于只有两个字形宽度的位图字体,它应该有所不同(在我的情况下,字形
user2284570 2015年

+1; 希望全自动翻译是不现实的。但是,在受限的上下文中,您在第三张图片中显示的内容实际上运行良好:如果要将丢失的数学运算符导入到等宽字体中,则该解决方案看起来还可以(我发布了软件来作为单独的答案)。
克莱门特

@布伦丹,我不同意。您所有示例的问题在于,您没有对所有字形应用相同的转换
symbiont

6

我在尝试大量使用Unicode符号来编辑源代码时遇到了这个问题。在这种情况下,大多数源代码以一种等宽字体显示,而该字体未覆盖的一些符号最终会破坏对齐方式。

尽管“全幅显示”完整字体确实会产生可怕的结果(字距调整,笔划宽度和总体平衡都将被完全弄乱),但从可变宽度字体中导入仅几个符号到等宽字体中会产生不错的结果。下面的动画显示了使用Consolas + Symbola作为后备,而使用Consolas + Symbola的单糖化版本:

单糖化前后

这对于高级排版没有用,但是如果您想在源代码中使用符号而不破坏缩进,那么这是一个不错的折衷方案。但是有一些警告:

  • 宽字符会在邻近空间上有点出血(尽管可以将它们稍微缩小以减轻问题)
  • 紧缩将是不好的(不是一个太大的问题,因为它只是一个后备)

我启动了一个GitHub项目,以自动处理这种字体转换。它包括预生成的字体和使用fontforge的Python绑定的代码。

另请参阅此emacs.se问题


-1

在文字处理器中,我:(1)创建一个表;(2)分成几列-每个字母一列;(3)将字母居中;(4)使内部和外部的所有边界不可见。


1
这不能回答问题。它无助于创建字体,听起来像是在浪费时间。
Moscarda'7
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.