![两页上的文本垂直平衡](https://linux22.com/image/334897/%E4%B8%A4%E9%A1%B5%E4%B8%8A%E7%9A%84%E6%96%87%E6%9C%AC%E5%9E%82%E7%9B%B4%E5%B9%B3%E8%A1%A1.png)
在之前的一个问题中,我问如何让一页上的两列保持垂直平衡。这个解决方案非常适合这个目的。
\newenvironment{overview}%
{\onecolumn\vtop to 0pt\bgroup\chapter*{Overview}\begin{multicols}{2}}%
{\end{multicols}\vss\egroup\hfill\twocolumn}
有没有办法实现类似的效果,但需要两个页面(pdfLaTeX
在 KOMA 类中使用)?也就是说,每页上有一列特定高度的列。也就是说,与overview
上面定义的环境相同,但结果的第一列出现在第一页(偶数页),第二列出现在第二页(奇数页)。
我尝试创建一个双列多列环境,就像当文本宽度是正常宽度的两倍时发生的情况一样,然后模仿该方法(如何在两页上添加图片,左侧部分在左侧,右侧部分在右侧(用于书籍)?),本质上在两个页面上创建了两个输出,但只显示正确的列。
\documentclass[b5paper,twoside]{scrbook}
\usepackage{adjustbox}
\usepackage{multicol}
\usepackage{lipsum}
\newlength{\innerMargin}
\setlength{\innerMargin}{3cm}
\usepackage[inner=\innerMargin]{geometry}
\makeatletter
\newcommand{\twopager}[1]{%
\cleardoubleevenstandardpage
\adjustbox{trim=0 0 {\innerMargin+\columnwidth} 0, clip}{%
\begin{minipage}{2\textwidth}
\addchap{Title}
\setlength{\columnsep}{2\innerMargin}
\begin{multicols}{2}
#1
\end{multicols}
\end{minipage}
}%
\newpage
\adjustbox{trim={\innerMargin+\columnwidth} 0 0 0, clip}{%
\begin{minipage}{2\textwidth}
\addchap{Title}
\setlength{\columnsep}{2\innerMargin}
\begin{multicols}{2}
#1
\end{multicols}
\end{minipage}
}%
\cleardoublepage
}
\makeatother
\begin{document}
\lipsum
\twopager{\lipsum[1-5]}
\lipsum
\end{document}
但是,这并不能完全正确地获得垂直间距(更不用说解决方案的优雅性了)。正确的方法是什么?
部分解决方案如下:
\documentclass[11pt,parskip=half-,twoside]{scrbook}
\newlength{\currentparskip}
\usepackage{afterpage}
\usepackage{float}
\usepackage{adjustbox}
\usepackage{calc}
\newlength{\innerMargin}
\newlength{\outerMargin}
\setlength{\innerMargin}{6cm}
\setlength{\outerMargin}{3cm}
\usepackage[a4paper, inner=\innerMargin,outer=\outerMargin]{geometry}
\newlength{\twopageboxwidth}
\setlength{\twopageboxwidth}{2\textwidth+2\innerMargin} %BCOR
%\newlength{\twopageboxtextwidth}
%\setlength{\twopageboxtextwidth}{\paperwidth-\innerMargin-\outerMargin}
\usepackage{newfloat}
\DeclareFloatingEnvironment{boxe}
\usepackage{multicol}
\usepackage{dpfloat}
\usepackage{lipsum}
\begin{document}
\lipsum[1-4]
\setlength{\currentparskip}{\parskip}
\afterpage{%
\begin{boxe}[p]
\begin{leftfullpage}
\begin{addmargin}[0em]{\textwidth-\twopageboxwidth}
\addchap{Overview}
\setlength{\columnsep}{2\innerMargin}
\begin{multicols}{2}
\setlength{\parskip}{\currentparskip}
\lipsum[1-5]
\end{multicols}
\end{addmargin}
\end{leftfullpage}
\end{boxe}
\begin{boxe}[p]
\begin{fullpage}
\begin{addmargin}[-\twopageboxwidth+\textwidth]{0em}
\addchap{Overview}
\setlength{\columnsep}{2\innerMargin}
\begin{multicols}{2}
\setlength{\parskip}{\currentparskip}
\lipsum[1-5]
\end{multicols}
\end{addmargin}
\end{fullpage}
\end{boxe}
}
\end{document}
生成结果:
这个解决方案基本满足了我的需求。但是也存在一些问题:
- 必须手动将环境放置在上一页(否则 LaTeX 会因
\afterpage
+进入无限循环leftfullpage
)。 - 两页的垂直放置位置太低了。