由于某些原因,我有一份 100 多页的LaTeX
文档,需要按以下方式进行格式化:
- 如果
\thepage = 1
(模 4),则边距必须设置为 5 厘米; - 如果
\thepage = 2
(模 4),则边距必须设置为 4cm; - 否则边距必须设置为 2cm。
该geometry
包提供了用于设置序言外边距的宏,即\newgeometry
和\restoregeometry
。
现在我需要一种方法来自动将它们插入到每页的开头。
不幸的是,由于输出例程的工作方式,这似乎是不可能的(参见下面一个不起作用的解决方案的示例)。
\documentclass{article}
\usepackage{geometry}
\geometry{a4paper, margin = 2cm}
\usepackage{lipsum}
% https://tex.stackexchange.com/questions/34424/how-do-i-calculate-n-modulo-3-in-latex
\def\truncdiv#1#2{((#1-(#2-1)/2)/#2)}%
\def\moduloop#1#2{(#1-\truncdiv{#1}{#2}*#2)}%
\def\modulo#1#2{\number\numexpr\moduloop{#1}{#2}\relax}%
\makeatletter
\let\@@outputpage\@outputpage
\def\@outputpage{%
\ifcase\modulo{\thepage}{4}\relax
% Page 4
\or
% Page 1
\newgeometry{margin = 5cm}%
\or
% Page 2
\newgeometry{margin = 4cm}%
\or
% Page 3
\restoregeometry
\fi
\@@outputpage}
\makeatother
\begin{document}
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\lipsum
\end{document}
我想知道luatex
lua 端的回调是否可以对此事有帮助?
答案1
如果有人能提出一个自动化的解决方案,我会感到非常惊讶和高兴。
LaTeX 一次排版一个段落。如果一个段落从一页延伸到下一页,则两页上的段落文本将使用相同的布局设置。如果您想将布局从一页更改为下一页,您必须确保第一页的结尾与段落的结尾重合,而下一页的开头是段落的开头(并在两者之间更改布局)。
我不认为这可以自动完成。但是,该类memoir
包含一个宏,\parnopar
定义为:
\newcommand{\parnopar}{\parfillskip=0pt\par\parskip=0pt\noindent}
将其插入段落中间会创建一个“不可见”的结束/开始段落。可以像这样使用:
Lots of text and now at the bottom of the page
\parnopar
% change the layout (via geometry or changepage packages or ...)
continuation of lots of text
不幸的是,可能需要多次尝试才能插入\parnopar
段落文本的最佳位置。
PS:我觉得你的文档的版式要求很奇怪。我不太确定我是否愿意阅读它,但想必这不是由你决定的。