我遇到了pdflscape
TikZexternal
库的一个问题,其中环境tikzpicture
中的外部化landscape
旋转不正确(使用 tikzexternalize 和 pdflscape 会导致图像旋转)。显然,这是一个已知的错误(已添加到pgfplots
2009 年“待办事项”清单)。
就我而言,如果我使用\usepackage[pdftex]{lscape}
而不是,则一切都会正常工作\usepackage{pdflscape}
:横向页面正确旋转并显示在 PDF 查看器中,并且外部化图像的方向正确。
我应该这么做吗?不是是否使用[pdftex]{lscape}
而不是{pdflscape}
包? 似乎两者都做同样的事情(确保横向页面在查看器中以横向模式显示)。 然而,在lscape
CTAN 页面它说:
请注意,该软件包没有为 PDF 输出做出特殊规定,原则上单个页面可以以全横向宽度显示;可以使用该
pdflscape
软件包来实现这种效果。
为什么该lscape
软件包建议使用pdflscape
而不是它自己的pdftex
开关?
答案1
回答各种问题“为什么lscape
软件包会推荐不同的软件包”其实并没有。ctan 目录软件包描述(通常)不是由软件包作者编写的,而是由第三方对软件包进行审查。
考虑 pdf 文件中的页面时,有三个地方可能会发生“旋转”。lscape
只考虑其中一个 [* 参见末尾关于[pdftex]
选项的注释] 并pdflscape
考虑两个。
要使页面横向显示,您需要:
首先切换
\textheight
和\textwidth
(以及一些其他相关的长度)。您可以在纯 TeX 中执行这些操作。然后,您需要将文本框旋转到页面上(因为 lscape 不会移动页码)这是通过使用
\rotatebox
图形包来完成的,因此需要由包选项指定或默认的驱动程序相关代码graphics.cfg
。对于打印来说,这就是你所需要的,但对于查看来说,你可能需要将“整个页面”向另一个方向旋转,以便屏幕上的主文本是垂直的,并且效果是页面轮廓旋转为横向。
pdflscape
插入额外的代码来旋转看法在查看器中。但是...一些 pdf 查看器使用启发式方法来确定页面上“主要”文本的方向,即使没有明确指定也会旋转页面视图。
据我所知,您无法可靠地以适用于所有查看器的所有配置的方式旋转页面视图。如果像原始版本一样lscape
忽略该问题,则使用自动旋转的查看器,页面看起来会很好,并且页面上有足够的文本可以分辨出哪个方向是向上的(对于图像,很难分辨哪个方向是向上的)。如果您强制视图旋转,那么pdflscape
(我认为)如果查看器自动旋转,它会旋转两次,因此最终会以错误的方向向上。如果能够说“这样向上”会很好,但我认为这是不可能的(而且这两个软件包都没有这样做),您只能从默认值中说“旋转视图”,该默认值可能会根据查看器而变化。
至少我认为情况是这样的,我从来没有真正使用过pdflscape
,但是在写这篇文章时我快速浏览了一下它的代码:-)
啊。如上所述,我检查了“其他”包的代码,但没有检查“我的”包的代码。...
显然,早在 1999 年,我就接受了第三方差异,以便lscape
还如果与 一起使用,则会影响 pdf 页面视图属性[pdftex]
。抱歉,我脑海中的版本是原始版本:
% \changes{v3.01}{1999/06/22}{Added better pdfTeX support
% by Scott Pakin, from graphics/3063}
%
%
% \begin{macrocode}
%<*package>
% \end{macrocode}
% Here is what Scott Pakin wrote about the pdftex option:
% \begin{quote}
% I've made a minor improvement to lscape.dtx that I'd like to share
% with the world. My addition makes lscape rotate the PDF "paper" --
% not just the text on the page -- when given the "pdftex" option.
% (Naturally, this works only with pdfLaTeX.) The result is that the
% text is viewable online without the reader having to rotate his/her
% head 90 degrees. The document still prints normally.
% \end{quote}
\ifGin@pdftex
\pdfpageattr{/Rotate 90}
\fi
因此我认为 pdftex 实际上没有任何区别,但pdflscape
为许多其他驱动程序后端(如 dvips 或 dvipdfm)添加了等效代码。抱歉造成混淆。
这也解释了为什么您需要使用[pdftex]
显式lscape
句柄本身来添加上面显示的代码。如果它只是让处理选项,然后进行内部检查以查看后端图形最终使用了哪个驱动程序,那么它可能更好。这样,如果图形驱动程序是默认的(图形包选项通常如此),graphics
它也会起作用。graphics.cfg