pdflatex
我注意到和之间的字体渲染效果有细微的差别xelatex
。xelatex
与相比,它往往稍微粗一些pdflatex
。甚至文件管理器中的文件缩略图看起来也不同(顺便说一句,我使用的是 Lubuntu linux)。
我尝试使用默认字体(Computer Modern)和 Charter(\renewcommand*\rmdefault{bch}
),它们仍然看起来不同。
% Computer Modern
% Compiled using both PDFlatex and XeLaTeX
% XeLaTeX result is slightly bolder
\documentclass[12pt]{article}
\usepackage[a5paper, margin=20mm]{geometry}
\usepackage{kantlipsum}
\begin{document}
\kant
\end{document}
计算机现代(PDFlatex):
计算机现代(XeLaTeX):
这是宪章……
% Charter font
% Compiled using both PDFlatex and XeLaTeX
% XeLaTeX result is slightly bolder
\documentclass[12pt]{article}
\usepackage[a5paper, margin=20mm]{geometry}
\usepackage{kantlipsum}
\renewcommand*\rmdefault{bch}
\begin{document}
\kant
\end{document}
章程(PDFlatex):
宪章(XeLaTeX):
你有同样的经历吗?你认为这正常吗?如何解决?谢谢。
PS:截图取自Texmaker的PDF预览(75%放大)。
PS 2:我正在使用 Lubuntu linux、Texmaker 和默认 pdf 查看器(Evince 3.10.3)。我无法使用其他操作系统进行比较。
更新:
我尝试了另一个查看器qpdfview
(仍然在 Lubuntu Linux 下)。问题仍然存在。在 Android 平板电脑上查看时(使用 Acrobat 和 Google PDF 查看器),它们很好。没有区别。所以..这是一个查看器问题(正如@Robert 在下面评论的那样)。
这是 qpdfview 的屏幕截图...
答案1
简短回答:
- 这是 Linux (X11) 上使用 FreeType 版本 ≥ 2.5(2013-06 发布)和 < 2.6.2(2015-11 发布)的 PDF 查看器特有的问题。例如,我可以
evince
在 Ubuntu 14.04 中重现此问题,但无法在 Ubuntu 12.04 或 Ubuntu 16.10 中重现。因此,请使用其他 PDF 查看器,或者直接升级(或降级!)您的 PDF 查看器。 - 即使在存在此问题的查看器版本中,如果您增加分辨率(例如放大文本或在优质打印机上打印),也不会留下任何明显的差异。
- 不仅如此
xelatex
,任何使用dvipdfmx
嵌入 Type 1C (CFF) 字体的人,都可以pdflatex
嵌入 Type 1 字体。 - 某些 PDF 查看器使用的 FreeType 渲染器(可能是:、、、、、、
qpdfview
)对Type 1C字体有更好的提示,但在 2.5 之后和 2.6.2 之前的版本中输出太暗。evince
okular
xpdf
atril
zathura
- 即使您已经使用并嵌入了 Type 1 字体,您也可以通过简单地调用PDF 文件(是)
pdflatex
将 PDF 转换为嵌入 Type 1C 字体,如下所示ps2pdf
这个答案。
这就是为什么尽管两份文档都应该用 Computer Modern 排版,但实际字体(字体的计算机实现)在两种方法中是不同的,并且某些分辨率下某些查看器的某些版本会以不同的方式呈现它们。更改任何这些措施(更换查看器、更换查看器版本、更换分辨率、对 PDF 进行后期处理)应该可以消除差异。
字体格式
计算机字体包含有关字母(字形)形状的信息。除其他格式外,这些形状可以通过以下方式描述:
- 位图格式:现在可能没人使用了(除了 Knuth,他有他的理由)
- TrueType 格式:形状由二次贝塞尔曲线描述
- “类型 1” 格式:形状由三次贝塞尔曲线描述
- “Type 1C”,又名 CFF(紧凑字体格式):Type 1 字体的无损压缩
这个问题的根本问题与 XeLaTeX 无关:它只是xelatex
使用dvipdfmx
嵌入 CFF 字体,正如你在dvipdfmx 页面:
PostScript 类型1
与 dvipdfm 一样,它支持 PostScript Type1 格式的字体,但它们会转换为 CFF 格式(以便在启用压缩时减小 PDF 文件大小)并始终嵌入为字体子集。
您可以在本网站上看到这些问题,这些问题讨论了pdflatex
(嵌入类型 1)显示得比穿过的东西更轻dvipdfmx
:pdflatex 和 latex-dvips-ps2pdf 链中的不同字体类型(提问者更喜欢 1C 型输出)和latex 和 pdflatex 编译的字体看起来不同。
字体光栅化
在足够高的分辨率下,有足够的像素来接近字体中指定的形状。在较低的分辨率下,没有,我们有低分辨率下的光栅悲剧(更多的)。
尽管类型 1 和类型 1C 在字形轮廓方面应该完全等效,但 PDF 查看器中的渲染器/光栅化器需要从字体中获取形状信息并将其实际转换为屏幕上像素(或“子像素”)强度的模式。
本期:FreeType 对 Type 1 与 CFF 的处理
这个确切的问题(通过xelatex
显示生成的 PDF 比通过生成的 PDF 更粗体pdflatex
)已在2016 年 1 月的 comp.text.tex,尽管那里的一些回应相当具有误导性(特别是,Type 1C 与 TrueType 无关),但它指出tex-live 邮件列表中 2014 年 12 月的这个主题问题已经得到充分回答。
问题在于,一些 PDF 查看器(如evince
和qpdfview
)使用的渲染器 FreeType 对 Type 1 和 CFF(Type 1C)字体使用不同的代码。引用 FreeType 维护者 Werner Lemberg 的话(2014 年 12 月):
FreeType 最薄弱的一点是 Type1 字体的提示。虽然由于 Adobe 贡献了新引擎,CFF 字体的处理非常好,但 Type1 仍然使用旧的原始引擎,由于时间不足,该引擎存在一些严重的错误,尚未解决。
Adobe 的 CFF 光栅化器代码在 Google 的资金支持下贡献给了 FreeType(FreeType 也用于 Android),并于 2013 年随 FreeType 2.5.0 版本发布。您可以查看以下博客文章:谷歌和Adobe谷歌博客文章中的例子证实了当时 CFF 渲染效果更暗:
相对
Adobe 博客文章中也有类似内容:
尽管 Google 博客文章的作者、FreeType 维护者和上述 comp.text.tex 上的发帖人 Igor 都认为 Type 1C 的渲染效果更佳,但当时的一些用户认为它太粗了,例如卡尔·贝利:
CM 字体栅格化后颜色更暗,几乎看起来像粗体字体。
问题并不完全出在 FreeType 上,但 X11 堆栈上的工具包和渲染库无法正确支持“线性 alpha 混合和伽马校正”。所有这些都在这篇文章中得到了很好的解释补充到2.6.2 发行说明. 随着 2.6.2 版本的发布(2015 年 11 月),他们默认关闭茎变暗(同时添加其早期原生(非 CFF)自动提示器也支持词干变暗,但已关闭)。
因此,当前的 PDF 查看器应该可以修复此差异。如上所述,我可以在 Ubuntu 14.04 上重现暗度差异,但在 Ubuntu 16.10 上却无法重现。在evince
直接安装在 Mac OS X 上时,我也无法看到它。
细微差别(除黑暗外)
即使在 Mac OS X 上使用 Preview 或 Adobe Reader,尽管上面很多人说他们没有注意到任何区别,但是页面上偶尔会出现差异(最明显的是字距调整),如果您将两个窗口叠加并在两者之间交替,您会注意到这一点。这种体验非常有趣,但不幸的是,很难展示这些截图。这是一次尝试,但您应该在自己的计算机上尝试一下:
无论如何,当您缩放文本时,这些差异往往会消失(它们会变得越来越不明显),从而每个字形都会占用更多的像素。
答案2
我刚刚在 Debian Jessie (MATE、LXDE) 上打开了这些 PDF。它们看起来完全一样,和pdflatex
。xelatex
我认为这是操作系统/查看器的问题。