如何来回更改页面布局?

如何来回更改页面布局?

我正在尝试在页面上进行绝对布局,但因为我使用了pdflscape,所以我无法使用textpos包来实现这一点。我尝试了移动\hspace*和,\vspace*但这非常繁琐,而且会产生很多溢出的框。所以我尝试只更改一个页面的页面布局,这基本上可行,但下一个页面损坏了,我无法理解。

这是我所做的;我存储旧尺寸,将所有内容设置为零或 (pdf)LaTeX 需要将其设为零,然后从保存的值恢复旧尺寸:

\documentclass{article}

\usepackage[english]{babel}
\usepackage{blindtext}

\newlength{\oldtextheight}
\newlength{\oldtextwidth}
\newlength{\oldevensidemargin}
\newlength{\oldoddsidemargin}
\newlength{\oldcolumnsep}
\newlength{\oldtopmargin}
\newlength{\oldheadheight}
\newlength{\oldheadsep}
\newlength{\oldfootskip}

\begin{document}

\blindtext[5]

\newpage%
% save old page dimensions
\setlength{\oldtextheight}{\textheight}%
\setlength{\oldtextwidth}{\textwidth}%
\setlength{\oldevensidemargin}{\evensidemargin}%
\setlength{\oldoddsidemargin}{\oddsidemargin}%
\setlength{\oldcolumnsep}{\columnsep}%
\setlength{\oldtopmargin}{\topmargin}%
\setlength{\oldheadheight}{\headheight}%
\setlength{\oldheadsep}{\headsep}%
\setlength{\oldfootskip}{\footskip}%
% set all margins to 0
\setlength{\textheight}{\paperheight}%
\setlength{\textwidth}{\paperwidth}%
\setlength{\evensidemargin}{-1in}%
\setlength{\oddsidemargin}{-1in}%
\setlength{\columnsep}{0pt}%
\setlength{\topmargin}{-1in}%
\setlength{\headheight}{0pt}%
\setlength{\headsep}{0pt}%
\setlength{\footskip}{0pt}%
% do absolute placement stuff where textpos doesn't work:
\noindent\rule{5mm}{5mm}\newpage% the necessity for this \newpage is also strange
% reset page dimensions
\setlength{\textheight}{\oldtextheight}%
\setlength{\textwidth}{\oldtextwidth}%
\setlength{\evensidemargin}{\oldevensidemargin}%
\setlength{\oddsidemargin}{\oldoddsidemargin}%
\setlength{\columnsep}{\oldcolumnsep}%
\setlength{\topmargin}{\oldtopmargin}%
\setlength{\headheight}{\oldheadheight}%
\setlength{\headsep}{\oldheadsep}%
\setlength{\footskip}{\oldfootskip}%
%\newpage % this wouldn't help a bit

\blindtext[10]

\end{document}

虽然页边距看起来或多或少完好无损,但类型区域比实际页面大。当我\textheight和其他所有内容一起重置时,这对我来说毫无意义。下图显示了上述示例中的第 3 页(单击放大):

一页之后,一切都恢复正常。任何关于发生了什么以及如何进行干净重置的帮助都将不胜感激。

也许我应该补充一点,我读到过,geometry软件包的较新版本具有一些命令\newgeometry\restoregeometry它们似乎可以执行我尝试手动执行的操作,但是我当前的 Beta Ubuntu(Precise)上的 TeXLive 发行版不够新,我宁愿不弄乱我的软件包管理器(它总有一天会回报我)或我的 TeX 树(它是黑暗艺术,从来没有像它应该的那样工作)。

我确实尝试过该gmeometric包(\geometry{textheight=\paperheight,textwidth=\paperwidth}\geometry{textheight=\oldtextheight,textwidth=\oldtextwidth}),但无济于事。

答案1

如果您有能力让您的代码依赖于geometryDebian、Ubuntu 或 Fedora 中尚未包含的版本,则可以使用以下代码替换问题中的代码。 可以肯定的是,它要短得多。

\documentclass{article}

\usepackage[english]{babel}
\usepackage{blindtext}

\usepackage{geometry}[2010/09/12]
\begin{document}

\blindtext[5]

\newgeometry{textheight=\paperheight,textwidth=\paperwidth}
% do absolute placement stuff where textpos doesn't work:
\noindent\rule{5mm}{5mm}
\restoregeometry

\blindtext[10]

\end{document}

不过我没搞清楚到底geometry用了什么技巧。最后要做\restoregeometry的就是调用\Gm@changelayout,它只是设置了一些长度,一些标准长度,一些内部长度geometry。甚至连一个都没有\clearpage

因此,如果一个答案能够真正解释为什么问题中的代码表现得如此奇怪,那么它仍然会受到高度赞赏和接受,并被认定为正确答案。

相关内容