使用Mac OS X上的LaTeX(特别是pdflatex)生成PDF文档时,字体出现了问题。

4

我的同事建议问题可能与texniscope有关,建议我将其从系统中清除。但我真的不希望不得不这样做!

可能的线索:

  • 在我升级到Leopard之前,这不是一个问题。

  • 当我说字体混乱时,我的意思是主要文本看起来可能是默认的Mac系统字体,而所有数学公式都完全无法阅读。基本上所有特殊符号都是完全混乱的。

  • 我从这里安装了latex:http://www.tug.org/mactex/。我已经安装了texniscope。

  • 当我运行/usr/texbin/pdflatex foo.tex时,它似乎可以工作:

     This is pdfTeXk, Version 3.1415926-1.40.9 (Web2C 7.5.7)
     %&-line parsing enabled.
     entering extended mode
    ...

但生成的pdf文件字体混乱。

  • 使用命令行上的pdflatex或使用TeXShop都会发生相同的情况。
6个回答

5
苹果公司已经知晓该问题并没有计划修复它(我有一位教师花费了很多时间进行测试并向苹果提交了一个错误报告)。他们声称PDFTeX嵌入字体的方式不正确,并且已经修复了苹果PDF库以更加严格地控制接受和拒绝的内容,这意味着您将继续在使用苹果PDF引擎显示PDF文件的预览、TeXShop或其他工具中看到由PDFTeX创建的PDF文档出现问题。不幸的是,他们并没有非常清楚地说明PDFTeX做错了什么,这使得修复它甚至向PDFTeX开发人员报告错误都成为了问题。请注意,Adobe的Acrobat或Reader应用程序通常可以无任何问题地显示这些文档;可以推测,Adobe的错误检查比苹果的宽松。
实际上,您可以在不重新启动计算机的情况下解决此问题,尽管您可能会在同一次会话中再次遇到相同文档的问题。您需要运行:
atsutil server -shutdown

这将会结束苹果字体服务服务器守护进程(ATSServer)并重新生成一个新的实例,同时重建其缓存文件。


主张是PDFTeX嵌入字体不正确。如果这是真的,我会非常惊讶。Acrobat 8能够轻松处理pdfTeX文件,并且使用微型排版的pdfTeX使用每行字体缩放和转换矩阵;如果字体被错误地嵌入,这根本无法工作。 - kquinn
看我的回答,这个 bug 确实在 pdftex 中 :) 但这并不是苹果没有帮助定位 bug 的借口。 - Damien Pollet

3

TUG最近发布了更新的二进制文件,修复了触发字体缓存损坏的错误:http://www.tug.org/mactex/fontcache/


哦!这是不是意味着我可以再次使用texniscope?Skim让我疯了。请参见:https://dev59.com/JHRB5IYBdhLWcg3wCjnO - dreeves
我不知道,texniscope自2004年以来显然没有得到维护...关于Skim,那种行为确实很烦人,我会向开发者提交一个错误/功能报告。 - Damien Pollet
有许多方法可以错误地嵌入字体,从而生成“可呈现”的文档。这可能包括不正确的字体度量、不正确的轮廓、不正确的子集、不正确的提示、不正确的许可证(即嵌入禁止嵌入字体)。此外,Acrobat 可能会查看字体并决定“哦,我知道那个字体”,然后忽略它,或者如果字体生成错误,Acrobat 可能会说:“嘿,嵌入的字体是错误的,但我有一个度量数据库,可以用来创建伪等效字体”。 - plinth

1

这个 bug 把我逼疯了。受到 this hint 的启发,我找到了最好的解决方法,即在 shell 中执行以下序列:

atsutil databases -removeUser
sudo atsutil databases -remove
atsutil server -shutdown
atsutil server -ping

您可以在您的 shell 配置文件中的 shell 函数中添加此序列(我的是 .zshrc):

function atsrm()
{
  atsutil databases -removeUser
  sudo atsutil databases -remove
  atsutil server -shutdown
  atsutil server -ping
}

...只需在终端中调用atsrm即可清除字体缓存。请注意,如果Skim处于打开状态,则会崩溃,并且某些应用程序可能会显示一些字符不正确,因此您需要重新启动它们。


1

看起来我找到了答案,来自http://www.stat.duke.edu/~dmm36/tech.php,如下所述。唉,看来我不得不放弃TeXniscope。我更喜欢TeXniscope,因为它更简单,具有更好的翻页键盘快捷键,而Skim则需要在每次出现latex错误时手动刷新pdf(否则Skim会自动刷新)。

引用自http://www.stat.duke.edu/~dmm36/tech.php

最近升级到Leopard后,使用latex(MacTeX 2007分发版)创建的pdf文件出现了非常奇怪和可怕的问题。关键是任何使用苹果本机pdf引擎的应用程序(例如preview.app、skim.app、Texniscope.app、LaTeXit.app,但不包括adobe reader 8)都无法正确显示字体。更神秘的是,同一文档在多次打开时可能呈现不同的效果。

经过大量的搜索,直到我在mac tex新闻组上找到了一个帖子,建议问题在于破损的字体缓存。另一次搜索带来了这个提示,说明如何删除Leopard中的所有字体缓存。从终端发出以下命令:
sudo rm -rf `lsof | grep com.apple.ATS/annex.aux | grep Finder | cut -c 66-139`

(如果您的路径中没有/usr/sbin,请将lsof替换为/usr/sbin/lsof

sudo rm -rf /private/var/folders/*/*/-Caches-/com.apple.ATS

然后重新启动。这个方法解决了我的字体问题。

注意:这个问题的一部分似乎是由于TeXniscope.app搞砸了字体缓存。例如,如果你删除字体缓存、重新启动并在预览中打开某些东西,它看起来会很好,但只要你再次在TeXniscope中打开某些东西,就又回到了原点。如果你遇到了这个问题,并且使用TeXniscope作为你的pdf预览器(如在aquamacs中),你应该切换到Skim作为你的pdf预览器。它非常不错,而且Skim维基上有关于如何将其与Aquamacs集成的说明。TeXniscope已经不再进行积极开发了。


1
我在Leopard上偶尔遇到过这种问题,尽管我从未使用过Texniscope。它似乎只是随机发生。我使用http://www.titanium.free.fr/pgs/english.html的OnyX清除我的字体缓存。 - Jouni K. Seppänen

0

在Adobe Reader中查看PDF文档属性。如果您的数学公式使用Type 3 (?) 位图字体,您需要告诉驱动程序将正确的Type 1矢量字体嵌入到生成的文档中。

我在Linux上使用latex和dvips然后转换为PDF。以前我必须告诉它这样做,但现在至少ubuntu上的软件包已经有了正确的字体设置。

在网上搜索如何将正确的字体嵌入到文档中。

仔细想想,也许您的系统上没有安装任何字体,或者您的字体都没有被嵌入到文档中。


聪明,尽管这最终不是问题所在。请查看我添加的答案。 - dreeves

0

我对你在使用MacTeX时遇到的问题感到有些惊讶。最近我安装了2008版本,不管是pdftex/latex还是xetex/latex,都能够完美运行。即使之前安装了teTeX,字体也不会成为问题。你能否将你的foo.tex文件分享给我们进行测试?


这绝对不是 tex 文件的错。请看我刚刚添加的答案。似乎是 TeXniscope 和 Leopard 的组合问题。如果有人能够证实或否认,请告诉我! - dreeves
确认。请查看我添加的答案。 - dreeves

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接