这个问题不太合理,因为我知道我不需要打电话driver=dvips
。但我想知道是否有人可以解释发生了什么。
一点背景知识
我正在努力学习tikz
。因此,我决定拿出一些包含我使用创建的图形(我认为很简单)的旧文档,pstricks
然后使用重写它们tikz
。
作为一个习惯的动物,我本来打算使用latex->dvips->ps2pdf
(我有一个 shell 脚本可以处理这个问题。所以,这通常是我无意识的。)但后来我尝试使用tikz
(例如使用spy
),但似乎不喜欢这条路线。我记得我应该只使用pdflatex
with 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
的当前值-在示例中为“信纸肖像”之前和“信纸风景”之后。\paperwidth
paperheight
geometry
geometry
答案2
问题是tikz
很可能还以半自动方式指定了它想要使用的驱动程序。据我所知,它可能会选择pdftex
。
实际情况如下:
Fail: Load Tikz -> driver=pdftex -> Load Geometry -> driver=dvips
Success: Load Geometry -> driver=dvips -> Load Tikz -> driver=pdftex
由于代码在第二种情况下可以正常工作,因此 dvips 驱动程序可能会以某种方式弄乱页面设置,从而影响最终结果。例如,如果您将第二个答案更改为driver=dvips
,driver=pdftex
它就可以正常工作。
简而言之,主要问题是两个软件包都以某种方式指定了要使用的驱动程序,这就是顺序对结果很重要的原因。这还取决于您使用的处理器(pdflatex 等),因为它们期望使用不同的驱动程序来获得正确的结果。