假设我们的系统默认纸张尺寸为 A4,并且我们有一个旧的 15 页长的文档(使用 llncs 类准备),我们目前还不完全理解它(无论是内容方面还是 LaTeX 方面)。在序言中我们看到\usepackage{pst-node}
。无论有没有这行,文档都可以顺利运行latex
;日志不会显示任何错误、警告或有关未定义或缺失内容的报告。尽管如此,比较两次运行(有/没有 pstricks)的 PDF 文件仍会diffpdf
发现视觉差异到处以及词语和字符的差异无处。
作为一个简单的例子,让我们运行
\documentclass[letterpaper]{llncs}
\pagestyle{empty}
\usepackage{pstricks}
\begin{document}
test
\end{document}
通过latex
,然后是。 当is 与 is not bydvipdf -dALLOWPSTRANSPARENCY
时,结果的视觉比较结果如下:pstricks
diffpdf
左侧的两个红色条标记了更改。由于这些红色条随处可见,因此我们无法获知文档是否确实需要 pstricks。
为什么仅仅包含一个绘图包但实际上不绘制任何内容就会引起这样的全局变化?罪魁祸首是谁?
如何检查是否需要或使用 pstricks(如果需要,在哪里或如何使用),而无需手动检查 15 页并尝试理解我们不太了解的命令和内容?(这可能需要几个小时到一个星期的努力:这篇论文是一篇典型的计算机科学论文。)
答案1
如果您注释掉该文档而不会出现任何错误,则该文档\usepackage
极不可能以任何必要的方式使用 pstricks,但是……
\documentclass[letterpaper]{llncs}
\pagestyle{empty}
\showoutput
%\usepackage{pstricks}
\begin{document}
test
\end{document}
如果你在有和没有盒子日志的情况下运行这个程序pstricks
(\showoutput
生成的 dvi 的可视化表示),会显示以下差异
369,372d178
< ..\special{header=pstricks.pro}
< ..\special{header=pst-algparser.pro}
< ..\special{header=pst-tools.pro}
< ..\special{header=pst-dots.pro}
374d179
< ..\special{papersize=614.295pt,794.96999pt}
380d184
< ....\special{color push gray 0}
382d185
< ....\special{color pop}
387,393d189
< ...\special{color push gray 0}
< ...\special{ps: /pssetRGBcolor /setrgbcolor load def /pssetCMYKcolor /setcmykco
< lo\ETC.}
< ...\special{ps:tx@Dict begin gsave STV CP T /ps@rot 0 def grestore end}
< ...\special{ps:tx@Dict begin gsave STV CP T /ps@refangle 0. def grestore end
< }
< ...\special{ps:0.8 setlinewidth 0 setgray}
408d203
< ...\special{color push gray 0}
410d204
< ...\special{color pop}
因此 dvi 有一堆附加的 (dvips 语法) \special
。
如果您使用不同的 dvi 驱动程序,这些特殊功能可能会被忽略或解释,具体取决于所使用的 dvi 驱动程序。
前四个header
特殊项包括 PostScript 源,如果不使用 dvips,这些几乎肯定会被忽略
特别papersize
设置媒体大小,如果使用的 dvi 驱动程序支持,将影响生成的 pdf 中的媒体框
特殊之处ps:
是 dvips 语法,用于注入文字 PostScript 代码,其他驱动程序可能会忽略它
其他特殊功能与颜色有关,可能会或可能不会被忽略,具体取决于所使用的 DVI 驱动程序,但只是设置黑色,因此不会产生可见效果
答案2
至于所讨论的最小文件:
[letterpaper]
为了进行比较,将类选项暂时更改[a4paper]
为 即可达到目的:更改后,对随后的diffpdf
两个结果进行运行,发现在三种模式(视觉、字符、单词)中均无差异。latex
dvipdf -dALLOWPSTRANSPARENCY
或者,
dvips -t letter -Ppdf -q -f infile.dvi | gs -q -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%stderr -sOutputFile=outfile.pdf -sPAPERSIZE=letter -dALLOWPSTRANSPARENCY -
使用 class 选项生成 PDF 文件[letterpaper]
。对每个文件执行一次infile.dvi
(一个使用 pstricks 生成,另一个不使用 pstricks 生成)并比较生成的 PDF 文件。
至于真正的、长达 15 页的非精简文档(我们没有向读者提供),我们仍然看到差异到处无论我们使用[a4paper]
类选项还是尝试生成信件 PDF 文件。(然而,这超出了目前问题的范围。)事实证明,这是\usepackage{color}
罪魁祸首:这个包对于文档来说是不必要的,不包括它使得使用和不使用 pstricks 之间的差异消失。