我正试图回答这个问题:我怎样才能仅在章节标题页上更改页面的几何形状,并在下一页上恢复正常? 看起来这应该不会太难(尽管有些人有意见)。但结果却异常困难,令人沮丧。
使用geometry
包
使用geometry
,可以轻松进入文档并手动更改边距等,并且易于恢复。在序言中,您只需调用:
\usepackage[margin=1in]{geometry}
如果你想暂时改变这一点,你可以写:
\savegeometry{mydefaultgeometry}
\newgeometry{margin=3in}
然后你可以调用:
\loadgeometry{mydefaultgeometry}
我认为 OP 的问题可以通过对页面输出进行一些调整来解决。我尝试了许多方法。我尝试使用atbegshi
、everyshi
和afterpage
。但都无济于事。
它是当地的对阵全球的问题
然后我有了一个想法:也许这是一个本地定义与全局定义值等的问题。我决定用一些简单的东西来测试一下:
\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
而我在那里找到的内容似乎有点令人困惑。:*(
因此,我仍然欢迎其他能够更好地理解我所做事情的人提供反馈。