PFB 字体在某些应用程序中损坏,而在其他应用程序中丢失(Kubuntu 20.04)

PFB 字体在某些应用程序中损坏,而在其他应用程序中丢失(Kubuntu 20.04)

我正在运行 Kubuntu 20.04。我遇到了一个问题,某些字体(Courier 和 Century Schoolbook L)在 Inkscape 等应用程序中损坏(在这些应用程序中它们是不可见的)或者font-manager它们显示如下: 字体管理器中有损坏的字体

它们也不会出现在 Libre 办公室中(我并不真正关心这个,因为我很少接触文字处理器)。

所有损坏的字体都是.pfb通过 TeX-live 或 ghostscript 安装的字体。由于字体已经安装,我无法安装所需字体的 TTF。显然我不想卸载 ghostscript 或 tex-live,因为我经常使用它们。

我试过跑步

sudo fc-cache -f -v

无济于事。字体显示在 KFontView 中: 在此处输入图片描述

这个错误特别令人沮丧,因为我已经在 inskcape 中使用了 courier 和 Century Schoolbook L 创作了艺术品。

有没有办法来解决这个问题?

答案1

几年前,许多程序已经明确放弃了对 Type 1 字体的支持。 虽然fontconfigFreeType 确实支持 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 字体。
  • xelatexluatex嵌入 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。

相关内容