实现一个自定义的手写编程字体

前情概要

故事的开始很简单, 我对字体再一次感受到了厌烦…之前一直使用的是 JetBrains Mono 和 Fira Code, 这两个字体用了很长的事件, 但是他始终没有解决的一个问题就是枯燥.

枯燥的含义就是我无法从编码过程中感受到美感, 这种感觉很奇特, 大概就是我开始感受到了无聊. 工作过的朋友应该能理解这种长时间读屎山代码的痛苦. 既然无法从代码本身上察觉到美感, 那么这部分的工作就落到了字体上. 既然无法理解到内在美, 何不好好化妆.

选定对象

自从开始了选择编程字体, 我开始了很久的选型, 最终选定了 RecMono, 这个字体的好处就是有点偏手写字体, 看起来不会那么乏味枯燥.

Rec Mono

而且你可以从这里看到他的官方介绍: Rec Mono Design

自定义

使用了这个字体过了一段时间, 熟悉的厌倦感又来了. 直到我发现这样的一个项目: recursive-code-config, 这是一个官方发布的自定义包, 我们可以通过 yaml 配置进行生成自己喜欢的 Rec Mono 字体. 具体的教学步骤是: Youtube 教学频道.

但是在使用过程中, 我也遇到了非常常见的一个错误. 当我执行 pip install -r requirements.txt # install dependencies 这个命令的时候, 出现了如下的 error 报错信息:

Requirement already satisfied: skia-pathops==0.7.4 in /usr/local/lib/python3.11/site-packages (from -r requirements.txt (line 11)) (0.7.4)
Collecting pyyaml==5.4.1 (from -r requirements.txt (line 14))
  Using cached PyYAML-5.4.1.tar.gz (175 kB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... error
  error: subprocess-exited-with-error

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [54 lines of output]
      running egg_info
      writing lib3/PyYAML.egg-info/PKG-INFO
      writing dependency_links to lib3/PyYAML.egg-info/dependency_links.txt
      writing top-level names to lib3/PyYAML.egg-info/top_level.txt
      Traceback (most recent call last):

具体而言就是当使用 pyyaml 5.4.1 的时候无法解决冲突问题, 解决办法也很简单, 修改 requirements.txt 中的 pyyaml 的版本号为 6.0.1:

# to enable all sorts of font manipulation
fonttools==4.39.3

# to check font versions in the build-all shell script
font-v==1.0.5

# to run the code font instantiation script
opentype-feature-freezer==1.32.2

# to remove components in code ligatures for improved rendering
skia-pathops==0.7.4

# to parse YAML config file
# Upgrade to v6.0.1 to fix the issue above
pyyaml==6.0.1

# to autohint output fonts
ttfautohint-py>=0.5.0

之后就是自定义字体的时候了.

最后的最后

有了自定义的字体之后, 我就做了 Firefox 专用的版本和 Iterm2 以及 Visual Studio Code/Visual Studio 的字体, 感觉美感又回来了. 又可以开始看屎山代码了.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.