使用geometry包

使用geometry包

我正试图回答这个问题:我怎样才能仅在章节标题页上更改页面的几何形状,并在下一页上恢复正常? 看起来这应该不会太难(尽管有些人有意见)。但结果却异常困难,令人沮丧。

使用geometry

使用geometry,可以轻松进入文档并手动更改边距等,并且易于恢复。在序言中,您只需调用:

\usepackage[margin=1in]{geometry}

如果你想暂时改变这一点,你可以写:

\savegeometry{mydefaultgeometry}
\newgeometry{margin=3in}

然后你可以调用:

\loadgeometry{mydefaultgeometry}    

我认为 OP 的问题可以通过对页面输出进行一些调整来解决。我尝试了许多方法。我尝试使用atbegshieveryshiafterpage。但都无济于事。

它是当地的对阵全球的问题

然后我有了一个想法:也许这是一个本地定义与全局定义值等的问题。我决定用一些简单的东西来测试一下:

\newcommand{\myname}{AEllett}

这是我尝试过的 MWE afterpage

\documentclass{report}
\usepackage{afterpage}
\usepackage{lipsum}
%%
\newcommand{\myname}{AEllett}
\newcommand{\mychapter}[1]{%
    \chapter{#1}%
    \afterpage{\renewcommand{\myname}{someone else's name}}%
}
%% loading fancy to test whether `\renewcommand` took effect globablly
\usepackage{fancyhdr}
\pagestyle{fancy}
\chead{\myname}
\begin{document}
\lipsum[1-15]
\mychapter{Hello}
\lipsum[1-15]
\end{document}

但是,如果我改写

\afterpage{\gdef\myname{someone else'sname}}

然后就出现了预期的效果。

所以我得出结论,楼主的问题在于

\afterpage{\loadgeometry{mydefaultgeometry}}

仅在本地设置页面几何参数,而不是全局参数。(我使用该包进行了相同的实验everyshi;结论相同。)

从内部手动重置值\afterpage

因此,为了自动改变页面几何形状,我想我可以做类似的事情:

\afterpage{\setlength{\global\oddsidemargin}{1in}%
           \setlength{\global\evensidemargin}{1in}%
           \setlength{\global\textwidth}{\dimexpr\paperwidth-2in\relax}%
          }    

但我得到了完全出乎意料的结果:即变化是不一致的。这是 MWE:

\documentclass{report}
\usepackage{afterpage}
\usepackage{lipsum}
\usepackage[showframe,margin=1in]{geometry}
%%
\newcommand{\myname}{AEllett}
\newcommand{\mychapter}[1]{%
    \newgeometry{margin=3in}
    \chapter{#1}%
    \afterpage{\setlength{\global\oddsidemargin}{0in}%
               \setlength{\global\evensidemargin}{0in}%
               \setlength{\global\textwidth}{\dimexpr\paperwidth-2in\relax}%
               %%\setlength{\global\linewidth}{\dimexpr\paperwidth-2in\relax}%
              }    
}
\begin{document}
\lipsum[1-15]
\mychapter{Hello}
\lipsum[1-25]
\end{document}

一些非常奇怪的事情正在发生。

手动设置所有页面尺寸

我以为使用该软件包与我手动设置之间存在一些不良交互geometry。因此,我再次尝试了实验,但没有使用该geometry 软件包。

梅威瑟:

\documentclass{report}
\usepackage{afterpage}
\usepackage{lipsum}
\usepackage{showframe}
\setlength{\oddsidemargin}{0in}
\setlength{\evensidemargin}{0in}
\setlength{\textwidth}{6in}
%%
\newcommand{\myname}{AEllett}
\newcommand{\mychapter}[1]{%
    \setlength{\oddsidemargin}{3in}
    \setlength{\evensidemargin}{3in}
    \setlength{\textwidth}{3in}
    \chapter{#1}%
    \afterpage{\setlength{\global\oddsidemargin}{0in}%
               \setlength{\global\evensidemargin}{0in}%
               \setlength{\global\textwidth}{\dimexpr\paperwidth-2in\relax}%
               %%\setlength{\global\linewidth}{\dimexpr\paperwidth-2in\relax}%
              }    
}
\begin{document}
\lipsum[1-15]
\mychapter{Hello}
\lipsum[1-25]
\end{document}

有趣的是,我成功地更改了有效的左侧边距。但是,我无法更改文本的宽度。取消注释设置行\linewidth并没有使情况变得更好。

忘记对章节做任何花哨的事情!

我决定尝试在文档中间改变参数,看看会发生什么。

梅威瑟:

\documentclass{report}
\usepackage{afterpage}
\usepackage{lipsum}
\usepackage{showframe}
\setlength{\oddsidemargin}{0in}
\setlength{\evensidemargin}{0in}
\setlength{\textwidth}{6in}
%%
\begin{document}
\lipsum[1-15]

\setlength{\global\oddsidemargin}{2in}%
\setlength{\global\evensidemargin}{2in}%
\setlength{\global\textwidth}{\dimexpr\paperwidth-4in\relax}%

\lipsum[1-25]
\end{document}

我得到了类似的结果。

我不明白这里发生了什么。 showframe显然认为文本宽度的尺寸已经改变。为什么 LaTeX 没有改变?

如果我在序言中添加以下内容:

\usepackage{fancyhdr}
\pagestyle{fancy}
\chead{\string\textwidth=\the\textwidth}

我可以看到它\textwidth实际上已经发生了变化:并且据我了解英寸和点之间的转换,正确的值正在显示出来。

\linewidth不让我改变它!

我尝试\textwidth与进行比较\linewidth。存在差异。所以我进去手动更改了\linewidth**但毫无效果!!!*

梅威瑟:

\documentclass{report}
\usepackage{afterpage}
\usepackage{lipsum}
\usepackage{showframe}
\setlength{\oddsidemargin}{0in}
\setlength{\evensidemargin}{0in}
\setlength{\textwidth}{6in}
%%
\usepackage{fancyhdr}
\pagestyle{fancy}
\chead{\string\textwidth=\the\textwidth\hspace*{2em}\string\linewidth=\the\linewidth}

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

\setlength{\global\oddsidemargin}{2in}%
\setlength{\global\evensidemargin}{2in}%
\setlength{\global\textwidth}{\dimexpr\paperwidth-4in\relax}%
\setlength{\global\linewidth}{\dimexpr\paperwidth-4in\relax}%
%%\large\normalsize
%%\clearpage

\lipsum[1-25]
\end{document}

为什么表面上正确\textwidth但实际上却不正确\textwidth?为什么我在设置时 LaTeX 会忽略我正在做的事情\linewidth

我在这里不明白什么?

编辑

我刚刚发现\hsize。设置似乎有效!唉!效果可想而知地丑陋,但\hsize确实使必要的更改有效。

这次编辑可能表明我有一个解决方案。我想我有。但是,我真的不明白我做了什么。还有什么其他参数可能需要重置?为什么我必须进入并更改\hsize,我能找到的唯一文档是在,source2e而我在那里找到的内容似乎有点令人困惑。:*(

因此,我仍然欢迎其他能够更好地理解我所做事情的人提供反馈。

相关内容