pdflscape 无法旋转仅包含浮点数的页面

pdflscape 无法旋转仅包含浮点数的页面

我习惯pdflscape将一些横向页面放置在较长的纵向文档中,因为它包含一些非常宽的浮点数。

然而,当浮动对象太大以致于需要单独的页面时,它就不再正确旋转:

以下代码:

\documentclass{article}
\usepackage{pdflscape}
\usepackage{lipsum}

\begin{document}
\lipsum[1-4]

\begin{landscape}
\lipsum[5-6]

\begin{figure}
\lipsum[7-8]
\caption{Some text, rotated correctly.}
\end{figure}

\begin{figure}
\lipsum[9-12]
\caption{Some more text, wrong side up.}
\end{figure}

\end{landscape}

\end{document}

产生该输出:

PDF 输出

如何正确旋转仅浮动的页面?

答案1

pdflscape只是包的包装器lscape。它设置/RotatePDF 页面数据结构中的条目。因此,问题显示了纸张的正确方向,第 2 页和第 3 页是横向的。

但是第三页的内容显示不正确。包lscape挂接到构造页面内容和旋转输出框的输出例程的宏中。但它漏掉了一个案例:

\documentclass[12pt]{article}
\usepackage[a6paper]{geometry}% smaller images for answer
\usepackage{lscape}

\begin{document}
\begin{landscape}
\rule{5mm}{50mm}\hfill\rule{5mm}{50mm}
\begin{figure}
\rule{5mm}{90mm}\hfill\rule{5mm}{90mm}
\caption{Some text, not rotated, wrong footer}
\end{figure}
\end{landscape}
\end{document}

第 1 页:

第 1 页

第2页:

第2页

lscape挂钩

  • \@makecol:正常页面
  • \@makefcolumn:浮动页面。它\@tryfcolumn在组内调用,实际工作在宏中完成\@vtryfc

但这漏掉了一个案例。输出例程以以下内容开始:

\output {%
  \let \par \@@par
  \ifnum \outputpenalty<-\@M
    \@specialoutput
  \else
    \@makecol
    \@opcol
    \@startcolumn
    \@whilesw \if@fcolmade \fi
      {%
       \@opcol\@startcolumn}%
  \fi

\@makecol构造第一页,它被包捕获lscape并旋转。\@opcol输出页面。然后\@startcolumn被调用。它还调用\@tryfcolumn,但不调用\@makefcolumn。因此,构造了一个输出页面,但未被包检测到lscape。(同样的\@startdblcolumn事情也发生在调用上\@tryfcolumn,但我还没有测试过,twocolumn 的东西是否真的有效。)

修复建议(包lscape或之后pdflscape):

\makeatletter
\let\LS@vtryfc\@vtryfc
\g@addto@macro\landscape{%
  \def\@vtryfc#1{%
    \LS@vtryfc{#1}%
    \LS@rot
  }%
}   
\makeatother

那么示例的第二页就变成:

第 2 页,已更正

而且问题的最后一页也是正确的:

问题最后一页,已更正

相关内容