如何让所有系统用户都可以使用字体

如何让所有系统用户都可以使用字体

我正在开发一个网页,我想调用pdflatex编译一个.tex文件来生成 PDF 报告。我在所在的目录中测试了该命令.tex,没有问题。

但是,如果服务器执行该命令,我会收到以下错误:

!pdfTeX error: pdflatex (file ecrm1095): Font ecrm1095 at 600 not found
==> Fatal error occurred, no output PDF file produced!

此 missfont.log 文件由以下一行生成:

mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 ecrm1095

现在关键来了。每当我以普通用户身份使用该命令时,它都会生成一个.texmf-var包含字体的目录。如果我尝试使用 php 进行编译,它会完美运行。但如果我删除该文件夹并再次尝试编译,它会失败并出现上述错误。据我所知,这是因为 apache 用户 (www-data) 看不到字体。而我的普通用户可以。

我搜索了网络,发现updmap-sys似乎可以让不同的字体集在整个系统范围内可用,但我不知道如何使用它。任何帮助都将不胜感激。

答案1

默认情况下,TeX 在 OT1 字体编码中使用 Computer Modern 字体。在大多数情况下,这意味着 metafont 源字体。我不确定它在这种情况下的具体工作原理,但显然 TeX 需要的任何东西都是现有 TeX 安装的一部分。

当您使用fontenc并指定 T1 编码时,TeX 会尝试以这种编码加载 Computer Modern。如果可用,TeX 将使用 type1 字体。这几乎总是您想要的,因为这些字体在所有 PDF 查看器中都能正确显示,即使是 Adob​​e 的(其 metafont 字体看起来很糟糕)。

如果字体不是如果在 type1 格式中可用,TeX 将尝试回退到 metafont。但在这种情况下,它需要从源文件生成可用的字体。通常,它在用户目录中执行此操作。对于 TeX Live,~/texlive/默认情况下位于该目录中。当然,这需要在相关目录中具有写入权限。如果 TeX 无法从源创建字体,它将失败并出现错误,因为字体不可用。它无法使用替代的“后备”字体,因为默认情况下,Computer Modern 是“后备”。

安装 时cm-super,会安装 type1 格式的 Computer Modern 字体。这包括为 T1 编码配置的字体以及 OT1。如果这些字体可用,TeX 就无需求助于 metafont,无需从源代码生成可用字体,也无需在 下写入文件~/texlive/

因此我认为,这涉及到权限问题。(或者,TeX 应该使用哪个目录来写入这些类型的文件,这存在问题。)但无论如何,最好的解决方案是使用 type1 字体和 T1 编码。(我不确定是否还有其他原因需要解决写入问题,但您不需要为此解决。)

有两种可能的解决方案:

  • 安装cm-super并使用T1编码;
  • 使用字体包,该字体包提供您想要使用的任何编码的 type1 字体(但 T1 是西欧语言的理想选择)。

例如,加载lmodern是解决问题的另一种方法。这些是基于 Computer Modern 的,但没有元字体版本,因此 TeX 会使用 type1,而不管编码如何。

答案2

好的,我找到了解决方法/问题的另一个线索。我在这里发布它只是为了帮助其他人。

首先,我错了。这不是用户权限问题。我将服务器用户名更改为自己的用户名,但仍然遇到找不到字体的问题。

然而,我能够将问题隔离到其中一条乳胶线。

特别是当我发表评论后它就开始正常工作:

\usepackage[T1]{fontenc}

该行继承自我经常使用的标题,但对于文档来说并不是根本性的,因此成功解决了它。

相关内容