我正在运行 Kubuntu 20.04。我遇到了一个问题,某些字体(Courier 和 Century Schoolbook L)在 Inkscape 等应用程序中损坏(在这些应用程序中它们是不可见的)或者font-manager
它们显示如下:
它们也不会出现在 Libre 办公室中(我并不真正关心这个,因为我很少接触文字处理器)。
所有损坏的字体都是.pfb
通过 TeX-live 或 ghostscript 安装的字体。由于字体已经安装,我无法安装所需字体的 TTF。显然我不想卸载 ghostscript 或 tex-live,因为我经常使用它们。
我试过跑步
sudo fc-cache -f -v
这个错误特别令人沮丧,因为我已经在 inskcape 中使用了 courier 和 Century Schoolbook L 创作了艺术品。
有没有办法来解决这个问题?
答案1
几年前,许多程序已经明确放弃了对 Type 1 字体的支持。 虽然fontconfig
FreeType 确实支持 Type 1 字体,但许多其他库和程序并不支持。在大多数情况下,fontconfig
只需将字体位置传递给程序,程序可以使用另一个库或自行渲染。这就是字体在各个程序之间渲染不一致的原因。
跨平台应用程序(例如 LibreOffice、Inkscape 和 Firefox)可能已经放弃了对 Type 1 的支持,因为它们使用的是最小公分母。根据维基百科, “[Type 1 字体] 不受 Windows GDI+、WPF 或 DirectWrite API 支持。” Type 1 字体的其他问题是字符集有限且缺乏 Unicode 支持。
展望未来,Type 1 的使用将越来越少。最终,唯一支持它的程序是那些必须支持的程序,即 PDF/PS 查看器和字体编辑器。一旦发生这种情况,没有简单的方法可以恢复对 Type 1 的支持,除非回到使用五年或更久以前的软件,那时 Type 1 支持更为普遍。
为了避免看到“损坏的” Type 1 字体,您可以配置fontconfig
隐藏它们。这基本上就是向前跳到 Type 1 支持的方向。
/etc/fonts/conf.d/00-reject-type1.conf
创建包含以下内容的文件:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "/etc/fonts/conf.d/fonts.dtd">
<fontconfig>
<selectfont>
<rejectfont>
<pattern><patelt name="fontformat">
<string>Type 1</string>
</patelt></pattern>
</rejectfont>
</selectfont>
</fontconfig>
然后使用 刷新字体缓存sudo fc-cache -r
。
只要直接访问字体文件,字体查看器和编辑器就应该继续按预期工作。
嵌入字体的 PDF 应该可以正确显示。引用外部字体时,应该使用fontconfig
指定的 OpenType 或 TrueType 字体。(我使用 Okular。其他基于 Poppler 的查看器应该有类似的行为。)
大多数 Type 1 字体都有 TrueType 和 OpenType 版本可用。 许多转换后的字体已扩展为支持 Unicode。以下是一些软件包:
fonts-urw-base35
fonts-texgyre
fonts-lmodern
有些字体会有不同的名称。如果字体是通过包管理器安装的,fontconfig
则应配置为替换正确的字体。如果通过复制字体文件来安装字体,则必须自行配置字体替换或手动更改文档中的字体名称。
- 前卫哥特式 ~ TeX Gyre Adventor ~ URW 哥特式
- 布克曼〜TeX Gyre Bonum
- 世纪教科书 ~ TeX Gyre Schola ~ C059
- 大法官府 〜 TeX Gyre 合唱团 〜 Z003
- 快递 ~ TeX Gyre Cursor ~ Nimbus Mono
- 标志 ~ D050000L
- Helvetica ~ TeX Gyre Heroes ~ Nimbus Sans
- 帕拉蒂诺 ~ 帕拉迪奥 ~ TeX Gyre Pagella ~ P052
- 时代 ~ TeX Gyre Termes ~ Nimus Roman
隐藏 Type 1 字体时 TeX Live 的行为fontconfig
如下……
latex
+dvipdf
嵌入 Type 1C 字体。pdflatex
嵌入 Type 1 字体。xelatex
并luatex
嵌入 Type 1C 和 CID Type 0C 字体。- 还可以指定和嵌入 TrueType 和 OpenType 字体。
这是我使用的测试文档:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{lipsum}
%%\usepackage{fontspec}
%\usepackage{mathspec}
%\setmainfont{Noto Serif}
%\setmonofont[Scale=0.8]{Noto Sans Mono}
%\setmathsfont(Digits,Latin,Greek){Noto Serif}
%\setmathrm{Noto Serif}
\begin{document}
\lipsum[1]
\[ \int_0^\infty \frac{1}{x} \;\mathrm{d}x \]
\raggedright
\tt{\lipsum[2]}
\end{document}
答案2
在 20.04 版中,很多地方都不再支持 Type1/.pfb 字体。Century Schoolbook 的 .otf 版本以 C059 的名称提供。URW 版本的 Courier 以 Nimbus Mono PS 的名称提供。
另外,您可以使用 fontforge 将 Type1 字体转换为 .ttf。