我应该选择 {pdflscape} 而不是 [pdftex]{lscape} 吗?

我应该选择 {pdflscape} 而不是 [pdftex]{lscape} 吗?

我遇到了pdflscapeTikZexternal库的一个问题,其中环境tikzpicture中的外部化landscape旋转不正确(使用 tikzexternalize 和 pdflscape 会导致图像旋转)。显然,这是一个已知的错误(已添加到pgfplots 2009 年“待办事项”清单)。

就我而言,如果我使用\usepackage[pdftex]{lscape}而不是,则一切都会正常工作\usepackage{pdflscape}:横向页面正确旋转并显示在 PDF 查看器中,并且外部化图像的方向正确。

我应该这么做吗?不是是否使用[pdftex]{lscape}而不是{pdflscape}包? 似乎两者都做同样的事情(确保横向页面在查看器中以横向模式显示)。 然而,在lscapeCTAN 页面它说:

请注意,该软件包没有为 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

相关内容