我注意到 pdfTeX 中存在奇怪的行为,但不知道该如何解释。以下两个示例中的 pdf 文件看起来不同。
texlive-lang-czechslovak
必须安装软件包才能尝试这些示例。我还在此处附上了我生成的 pdf 文件:例子1.pdf,例子2.pdf。
示例1
\showboxbreadth=\maxdimen
\showboxdepth=\maxdimen
\let\oldshipout\shipout
\def\shipout{\global\let\shipout\oldshipout\afterassignment\myboat\setbox255=}
\def\myboat{\aftergroup\myship}
\def\myship{\showbox255\shipout\box255}
\nonstopmode
\let\originput\input
\def\input utf8off {\let\clearmubyte\empty \let\input\originput}
\originput docby.tex
\let\originput\undefined
\def\Black{\pdfliteral{0 g 0 G}}
\let\Green\Black
\hsize=210mm\advance\hsize by-3cm
\def\outputhook{\hoffset=\ifodd\pageno1.5cm\else1.5cm\fi\advance\hoffset by-1in}
\def\ins #1{\ifirst {#1}{^^73udo}{\end}{++}}
\let\isnameprinted-
\parindent=20pt
\indent\llap{\hskip-\parindent\bf1.\hfill}Test.
\ins \jobname
\bye
sudo perl -i -pe "s/datestyle = 'iso, mdy'/datestyle = 'iso, ymd'/" /etc/postgresql/*/main/postgresql.conf \
&& sudo /etc/init.d/postgresql restart
示例2
\showboxbreadth=\maxdimen
\showboxdepth=\maxdimen
\let\oldshipout\shipout
\def\shipout{\global\let\shipout\oldshipout\afterassignment\myboat\setbox255=}
\def\myboat{\aftergroup\myship}
\def\myship{\showbox255\shipout\box255}
\nonstopmode
\let\mubyte=\undefined \let\mubytein=\undefined
\input docby.tex
\def\Black{\pdfliteral{0 g 0 G}}
\hsize=210mm\advance\hsize by-3cm
\def\outputhook{\hoffset=\ifodd\pageno1.5cm\else1.5cm\fi\advance\hoffset by-1in}
\def\ins #1{\ifirst {#1}{^^73udo}{\end}{++}}
\let\isnameprinted-
\parindent=20pt
\indent\llap{\hskip-\parindent\bf1.\hfill}Test.
\ins \jobname
\bye
sudo perl -i -pe "s/datestyle = 'iso, mdy'/datestyle = 'iso, ymd'/" /etc/postgresql/*/main/postgresql.conf \
&& sudo /etc/init.d/postgresql restart
重现步骤:
$ pdfcsplain bad_letter_e-1.tex
$ pdfcsplain bad_letter_e-2.tex
$ pdftoppm bad_letter_e-1.pdf e1
$ pdftoppm bad_letter_e-2.pdf e2
$ md5sum e1-1.ppm e2-1.ppm
b08f8cd73e037280f8cdef7057c0e1a9 e1-1.ppm
a5818433399c443ad9fee8deb35208d9 e2-1.ppm
我们看到哈希值不同。如果我们在 pdf viewer 中打开这些 pdf 文件,放大到 400% 并进行比较,我们会看到单词“postgresql.conf”中的字母“e”发生了移动。
\showbox
以上两个例子使用了相同的排版指令,从输出中可以看出。
这是区别\showbox
:
--- bad_letter_e-1.log
+++ bad_letter_e-2.log
@@ -145,7 +145,6 @@
...\ttsmall s
...\ttsmall q
...\ttsmall l
-...\pdfliteral{0 g 0 G}
...\ttsmall /
...\ttsmall *
...\ttsmall /
那么,\pdfliteral
这会影响排版吗?这是正确的行为吗?如果\pdfliteral
不是原因,还能如何解释呢?
答案1
Poppler pdf 渲染库是罪魁祸首 - pdf 文件本身没有问题。可以通过先转换pdf
为ps
,然后ps
转换为图像来检查:
$ pdf2ps bad_letter_e-1.pdf
$ pdf2ps bad_letter_e-2.pdf
$ pstopnm bad_letter_e-1.ps
$ pstopnm bad_letter_e-2.ps
$ md5sum bad_letter_e-1*.ppm bad_letter_e-2*.ppm
a879acaaab2af4bd4a3c8563ec0c7c48 bad_letter_e-1001.ppm
a879acaaab2af4bd4a3c8563ec0c7c48 bad_letter_e-2001.ppm
现在哈希值总和相等。