合并字体/减少可选字体数量?


有没有办法减少Libreoffice里可供选择的字体的数量啊,其中大部分字体平时用不到,选起来这个框还有点卡。直接禁用会影响其他软件的字体显示,网页里有些字符会加载不了。

这是个时间很久的问题,我现在能想到的办法是,自己测试一下看哪些字体能够删除,把删除命令全部写进脚本,新安装系统时,一次性执行一下这个脚本。

确实是老生常谈的问题,而且无论是 Linux 还是 Windows 都经常有人提。个人的建议是:

  • 非美术设计从业人员,基本上用得到的字体是固定的。因此与其每次都找字体,不如花点时间修改默认模板的字体设置。这样,下次打开办公软件就可以直接打字了,不用再去管字体的事情。
  • 如果经常需要使用各种美工字体,建议是多设置几种样式,比如 “正文1” 用黑体,“正文2” 用楷体,“正文3” 用手写体。需要用某种字体,就直接应用这种样式,一步到位。

Write 可以和 MS Word 一样修改各种样式的字体设置。至于 Calc(电子表格)和 Impress(幻灯片),可以参考本文设置默认字体:


至于删减字体,个人建议还是一定要慎重,有些字体可能只是你现在用不到,或者你不知道什么地方用得到。但日后需要它们的时候,它们不在,那可能就有点麻烦了。

或许更安全一点的方法是,用 apt-file 定位该字体文件是在哪个软件包里,然后删除这个软件包。如果删除这一软件包没有导致其他依赖问题,那么基本上可以肯定删除它是安全的。而且日后如果安装其他软件时需要它,还可以通过依赖关系装回来。

比如noto sans感觉就是一个完整的字体拆成了一段段, 要是有办法“注册”成一个字体就好了

Noto Sans 的计划是支持所有语言。如果全合并在一起,体积是非常大的。而且就拿中文来说,同一个字,在中国大陆、香港、日本、韩国的标准写法都是不一样的,因此必须要参照不同地区的写法设计多种不同的字体(所以你会看到 Noto Sans CJKSCTC 等多个变种)。

个人建议,系统预装的字体,能不动就别去动。至于字体不好找的问题,GTK3 的字体选择窗口提供了搜索框,而 LibreOffice 的字体选择框其实也有搜索功能,您可以先先选择框中输入字体名称的前几个字符,再点击下拉框。(比如,要调用 DejaVu Sans 字体,先输入 Dej,再按下拉按钮即可。若是 宋体 这种名字比较短的字体,直接在选择框中打字,然后敲 Enter 即可。)

最主要的问题是单个字体文件最多只能包含 65535(或者6?)个字符。所以字云才被分成了三个文件。

也不是不可以叫同一个名字然后根据语种使用不同的字形(如思源字体的做法)。同一个字体也可以有不同的字族名。

1 个赞

Ai一点也不知道……

就是写个bash脚本直接删,我的像这个样子的:
sudo find /usr/share/fonts -iname ‘arabicttf’ -delete

sudo fc-cache -f

可以有多达上百行

代码最好用代码块包裹一下,否则一些特殊符号(*_$ 等)会被当作 Markdown 的标记进行渲染,看不到的。

比如您的代码里面:

莫名其妙出了一处斜体,应该是因为您的代码中有两个 *。这个论坛用的是 Discourse 系统,帖子用的是 Markdown 语法,夹在两个 * 之间的内容会被渲染为斜体,同时 * 是隐藏的,就像 HTML 中的 <i></i> 标签。

另外,如果不用代码块包裹,英文引号会被换成弯引号,这样的引号 shell 是无法识别的。

正确的写法应该是:

```bash
sudo find /usr/share/fonts -iname '*arabic*ttf' -delete
…
sudo fc-cache -f
```

渲染出来的效果是:

sudo find /usr/share/fonts -iname '*arabic*ttf' -delete
…
sudo fc-cache -f

回到您的帖子,其实这种直接干掉字体文件的做法是非常危险的。比如您给出的例子,删掉的是阿拉伯语字体,那么日后在打开网页时,如果碰到阿拉伯语字母,大概率会显示成 tofu(空白方块)或乱码。

而且这样删,很有可能不小心把 UI 界面中符号图标的字体也一起删掉,这样很容易出大麻烦。比如之前有人手滑删了 Windows 系统中的 Wingdings 2 等字体,结果系统中很多界面的符号图标全部变成了方块,而且因为没有做记录,那人也记不清自己到底是删了哪些字体,最后只能重装系统解决。

首先查看系统里安装的字体:

apt list --installed | grep '^fonts-'

其中部分字体是作为推荐依赖安装的,不需要的话可以删除,常见的比如fonts-noto-extrafonts-noto-cjk-extra等。

然后查看你想删除的字体是否可以删除:

apt rdepends --installed fonts-any-font-you-want-to-remove

如果上述命令列出的条目中没有Depends依赖就说明可以删除。

最后,使用如下命令删除字体:

sudo apt autopurge fonts-any-font-you-want-to-remove

顺便说一下,noto系列字体只保留fonts-noto-corefonts-noto-cjkfonts-noto-color-emoji对于大多数用户来说应该就足够了。

顺便说一下,noto系列字体只保留fonts-noto-corefonts-noto-cjkfonts-noto-color-emoji对于大多数用户来说应该就足够了。

装 font-manager 把大部分字体都禁用了,用一段时间看看情况
感觉真正的需求是保证字体库里最好有且仅有用到的字体,如果有比较方便的办法看到豆腐块就知道缺失的是什么字体就好了

这个可以有。不过首先你要么能复制出豆腐块来检查,要么豆腐块上写了它的编码(GTK 和火狐会写,Qt 不会)。

然后你专门创建个沙盒环境把所有字体都给 fontconfig 扫描,再 fc-list :charset=16进制编码 就能看到了。