为什么在调用“driver=dvips”之前加载 tikz 会有所不同

为什么在调用“driver=dvips”之前加载 tikz 会有所不同

这个问题不太合理,因为我知道我不需要打电话driver=dvips。但我想知道是否有人可以解释发生了什么。

一点背景知识

我正在努力学习tikz。因此,我决定拿出一些包含我使用创建的图形(我认为很简单)的旧文档,pstricks然后使用重写它们tikz

作为一个习惯的动物,我本来打算使用latex->dvips->ps2pdf(我有一个 shell 脚本可以处理这个问题。所以,这通常是我无意识的。)但后来我尝试使用tikz(例如使用spy),但似乎不喜欢这条路线。我记得我应该只使用pdflatexwith tikz

另外,我忘记了通常需要加载才能正常工作的一些其他附加功能pstricks:其中之一就是加载驱动程序dvips

这就是我注意到的:

如果我编译(使用pdflatex)这个第一个 MWE,一切都会运行得很好---即使我正在调用驱动程序dvips。(tikz代码来自 van Dongen 的新书。)

\documentclass{article}
\usepackage[driver=dvips,
            landscape,
            twocolumn,
           ]{geometry}
\usepackage{tikz}
\usetikzlibrary{spy}
\usepackage{showframe}
\usepackage{lipsum}
\begin{document}

\begin{tikzpicture}
    [spy using outlines={circle,
                         magnification=2.5,
                         size=3cm,
                         connect spies}]
    \begin{scope}
    [spy using outlines={circle,
                         magnification=3,
                         size=3.5cm,
                         red,
                         connect spies}]
    \draw (-36:0.8)
          \foreach \angle in {0,36,...,359}{
                -- (\angle:0.8)
                   (\angle:1.1) node {$\angle$}
                   (0,0) -- (\angle:0.8)
            };
        \spy on (167:1) in node (zoom) at (-30:5.5);
    \end{scope}
    \spy[blue] on (zoom) in node [right] at (-135:4.5);

\end{tikzpicture}

\lipsum[1-5]

\end{document}

但是有一次我在加载包时很马虎,结果我的landscape指令似乎geometry在最终的 pdf 文档中被忽略了,这让我很沮丧。

这是此问题的 MWE失败与之前的 MWE 唯一的区别在于我调用\usepackage{tikz}。 (仍然使用 进行编译pdflatex。)

\documentclass{article}
\usepackage{tikz}
\usepackage[driver=dvips,
            landscape,
            twocolumn,
           ]{geometry}
\usetikzlibrary{spy}
\usepackage{showframe}
\usepackage{lipsum}
\begin{document}

\begin{tikzpicture}
    [spy using outlines={circle,
                         magnification=2.5,
                         size=3cm,
                         connect spies}]
    \begin{scope}
    [spy using outlines={circle,
                         magnification=3,
                         size=3.5cm,
                         red,
                         connect spies}]
    \draw (-36:0.8)
          \foreach \angle in {0,36,...,359}{
                -- (\angle:0.8)
                   (\angle:1.1) node {$\angle$}
                   (0,0) -- (\angle:0.8)
            };
        \spy on (167:1) in node (zoom) at (-30:5.5);
    \end{scope}
    \spy[blue] on (zoom) in node [right] at (-135:4.5);


\end{tikzpicture}

\lipsum[1-5]

\end{document}

如果我取消调用,就不会出现任何问题driver=dvips。所以,请不要解释我不需要该驱动程序。但我想知道的是:为什么在调用驱动程序tikz之前调用驱动程序时只会出现明显的冲突?

答案1

如果您加载了geometry有故障的dvips驱动程序,则它不会设置负责“pdf-background”的长度\pdfpagewidth\pdfpageheight因此它们保留其默认值(目前通常以格式设置)。 在我的情况下,这是 a4 纵向(即使我添加了一些纸张选项,例如letterpaper)。

如果您另外加载,tikz它将加载graphicx,进而将\pdfpagewidth和设置为和\pdfpageheight的当前值-在示例中为“信纸肖像”之前和“信纸风景”之后。\paperwidthpaperheightgeometrygeometry

答案2

问题是tikz很可能还以半自动方式指定了它想要使用的驱动程序。据我所知,它可能会选择pdftex

实际情况如下:

Fail: Load Tikz -> driver=pdftex -> Load Geometry -> driver=dvips

Success: Load Geometry -> driver=dvips -> Load Tikz -> driver=pdftex

由于代码在第二种情况下可以正常工作,因此 dvips 驱动程序可能会以某种方式弄乱页面设置,从而影响最终结果。例如,如果您将第二个答案更改为driver=dvipsdriver=pdftex它就可以正常工作。

简而言之,主要问题是两个软件包都以某种方式指定了要使用的驱动程序,这就是顺序对结果很重要的原因。这还取决于您使用的处理器(pdflatex 等),因为它们期望使用不同的驱动程序来获得正确的结果。

相关内容