翻译了Emacs,字体与字体集

关于Emacs里font 和 fontset的博客,解决了我很多疑问 继续讨论:

之前分享了这篇博客,后来感觉确实有用,取得原作者同意以后翻译成中文发到了博客上。之前没仔细看的同学可以看看:

https://archive.casouri.co.uk/note/2019/emacs-字体与字体集

主要讲的就是怎么配合Emacs寻找字体的方法配置Emacs字体,尤其是给不同语言配置不同的字体和怎么配置后备字体。

27 个赞

好东西!感谢楼主的付出和分享!

1 个赞

看不到,需要番羽墙吗?

似乎並不需要,中國移動用戶

博客是在GitHub托管的,国内应该没问题

我公司用的网通,连不上,等回家用联通试试。

看了这篇文章,自己又折腾了一通,感觉仍然不是很清楚。我先概括下它的意思,楼主看看是否有偏差?

  • 使用 (set-face-attribute 'default nil :font "Font Name") 给整个区间设定字体(缺字的情况下 Emacs 怎么 fallback 先不管)
  • 使用 (set-fontset-font t 'charset FONT-SPEC) 覆盖 charset 或 script 的字体配置
  • 同上,但后面跟上 nil 'appendnil 'prepend,可以在已经有配置的区间上,前面或者后面加字体配置

我的问题是,我用了 set-face-attribute 设置了更纱黑体作为默认字体,这个字体包括了西文、中文和日文;然后用第二种方法单独设置 script 的字体时,设置 'han 为其他字体(如 Droid Sans Fallback)会起作用,设置 'latin 为其他字体就不起作用,而设置 'unicode 为其他字体的话,西文部分仍然是更纱黑体,其他部分则会变动。这让我感觉它们的关系不是上面所说的这么简单。。。因为 Emacs 自带的文档说得也很模糊,我没有整明白,想问问楼主有什么看法?

2 个赞

你具体的代码是啥?不知道具体代码我也不好说,毕竟我也只是翻译。

西文部分不变的原因可能是emacs不支持这样修改ascii字体(如原帖所说

我写了个挺复杂的函数,用来从一个列表中读字体配置并且自动设置。效果大概就是这样的:

(set-face-attribute
  'default nil
  :font (font-spec :family "Sarasa Term CL" :size 20))
(set-fontset-font t 'unicode (font-spec :family "Droid Sans Fallback"))

我不太清楚他所说的不能设置 ascii 字符这个结论是哪来的,我看函数的文档里并没有说。而且就算是这样,这个范围肯定也比 ascii 大,因为我试了 à、é 之类的字符也没起作用。

他可能是邮件列表问的?

你这个看着没毛病……

:rofl: 嗯,所以现在我就假设拉丁字符一定会用「默认字体」显示了(如果字体里有的话)

1 个赞