PragmataPro

purchase

今天下单买了心水已久的PragmataPro(€19的Essential Regular版本)。与Iosevka ss08对比了一下,还是有点儿不同的。PragmataPro的清晰度、可读性确实好一点(这个判断可能有点儿主观。不过确定的是,PragmataPro的x-height更高,看上去更饱满,数字0也比Iosevka ss08那个有棱有角的菱形更圆润),可以安慰自己算是没白花钱 :P

至于覆盖更多glyphs的full version我就不打算买了。Essential PragmataPro包含的glyphs已经覆盖了我平时看代码/笔记99%的场景中能看到的字符。另一方面,有Iosevka这样的优秀字体补充Essential PragmataPro未能支持的字符,购买昂贵的full version带给我的额外满足感可能微乎其微。我当前使用的VS Code font fallback配置是:

{
"editor.fontFamily": "Essential PragmataPro, Iosevka Fixed",
"editor.fontLigatures": "'ss08'",  // only affects Iosevka since Essential PragmataPro doesn't support ligatures
}

由于Iosevka的x-height比PragmataPro稍低一些,所以诸如aàáâ这样的字符放在一起的话,我们可以看到后面3个带调号的àáâ(fallback到Iosevka)比不带调号的a(使用Essential PragmataPro显示)要矮一些,有点儿不和谐。如果实在介意这一点,可以使用Pragmasevka(一个Iosevka的custom build,微调了x-height)。不过这种字符对我的use case来说太少见了,而且也只有不同字体的相近字母变种紧贴在一起我才会感觉怪异,如果一些非基本拉丁字母被单独显示,例如 α β γ δ,若不是事先知道,我很难意识到它们fallback到Iosevka了。

a

不过,€19买不到Bold和Italic字重有点儿遗憾(Essential Bold可以再花 €19购买,Italic则仅包含在€59的SKU中)。以VS Code为例,如果 editor.fontFamily 列表的第一个typeface没有Bold/Italic字重,VS Code不会fallback到下一个typeface(除非第一个typeface完全不支持该码位),而会直接以常规字重(Regular)或伪斜体(Oblique)显示该字符。

不少color scheme(e.g., Solarized)会把comments渲染为斜体/伪斜体,如果不喜欢,可以通过override textMateRules的方式禁用斜体/伪斜体。这样,VS Code在显示syntax highlighting时,就只能利用颜色区分不同的语义。好在这影响不大。Ghostty则直接提供了font-synthetic-style这样的选项来控制是否允许使用伪斜体/伪粗体。

History

PragmataPro这个项目几年来一直在不断更新、演进(包括增加支持新的glyphs以及引入现代字体特性),直到今天。搜了一下version history,我最看重的CJK compatible(即默认字宽是0.5em,两个西文字符刚好与一个CJK字符对齐)特性居然是2016年3月的v0.822版本才引入的。更早的版本更宽一些。

重新去听了Kernel Panic Ep.05 “编程字体”,2:01:28处,吴涛讨论了PragmataPro的各种字重和价格,十年过后依然没变。那个时候也没有Iosevka。十多年后的今天,我们有了更多优秀、免费的“编程字体”可选,而Condensed design、Ligatures等特性早已不再是PragmataPro的独有优势。As DiabloD3 puts it:

… the only reason PragmataPro stands out so well is the ridiculous amount of hand tuning at every height, not necessarily the actual aesthetic look of the font (of which, Iosevka certainly picks up important design cues from, even without SS08 enabled).

Usage

我使用condensed typefaces的主要场景是VS Code(现在VS Code的Panels太多了,Explorer/Copilot Chat/Terminal … 有时候主editor还会左右分栏。空间紧张,字体紧凑一点儿还是有必要)。但在Ghostty等terminal emulator中我有时还是会使用内嵌的JetBrains Mono (ss01)。因为时常遇到大段密密麻麻的输出,这时候PragmataPro这样的字体显得太拥挤了,看上去有点累。JetBrains Mono就舒服很多。more room to breathe.

Supported glyphs

As of 2026-05, Essential v1.4支持的glyphs有656个,可以用如下命令查看(然后写一个简单的Python脚本就可以统计一共有多少个)。

fc-query --format='%{charset}\n' <font_file>.ttf

可以看出它支持的主要的几个连续Unicode blocks是Basic Latin (0020-007E), Mathematical Operators (2200-22FF), Control Pictures (2400-2426), Box Drawing/Block Elements (2500-259F);另一一些零散的glyphs,例如希腊字母中只支持了 Ω (03A9) 和 π (03C0)。官方列表