我正在开发一个网页,我想调用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 查看器中都能正确显示,即使是 Adobe 的(其 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}
该行继承自我经常使用的标题,但对于文档来说并不是根本性的,因此成功解决了它。