在这个问题,我描述了当它们出现在分页符附近时出现在页面错误的一侧的问题marginpars
。我遇到了下面描述的一个不同但可能相关的问题。我有一个与 LaTeX 无关的解决方案(也在下面描述),我将其作为解决方法包括在内,以防其他人发现它有用,但我非常希望有一个纯 LaTeX 解决方案。
我想用双面纸将我的课程笔记打印成一本书。[我正在使用课堂笔记memoir
。] 我还想在“外部”(即宽)边距中放置文本或图形 - 并且该边距应该根据页面是奇数还是偶数而改变。
我还希望能够从单栏(宽边距)更改为双栏(窄边距),以便在每章末尾包含已解决的示例和/或问题。我遇到的问题是,如果双栏环境跨越页面边界,则在双栏环境开头进行的边距调整(正确)在后续页面上是完全错误的。
这是一个 MWE - 实际上是三个 MWE 合二为一。根据注释掉的选项,可以有正常的双面回忆录输出,或者有宽边距在左侧或右侧的单面输出。请注意,注释掉的选项出现在两个地方:开头和序言的页面布局“部分”。
%%%%% two-sided option with wide margin alternating sides
% \documentclass[openany,twoside]{memoir}
% \newenvironment{widematter}{\begin{adjustwidth*}{0in}{-2in}\small}{\end{adjustwidth*}}
%%%% one sided - wide margin (for marginpar) on the right
% \documentclass[openany,oneside]{memoir}
% \newenvironment{widematter}{\begin{adjustwidth}{0in}{-2in}\small}{\end{adjustwidth}}
%%% one sided - wide margin (for marginpar) on the left
\documentclass[openany,oneside]{memoir}
\newenvironment{widematter}{\begin{adjustwidth}{-2in}{0in}\small}{\end{adjustwidth}}
\marginparmargin{left}
%%% page layout dimensions for memoir
\setstocksize{11in}{8.5in}
\settrimmedsize{\stockheight}{\stockwidth}{*}
\settypeblocksize{9.0in}{5in}{*}
\setulmargins{1.0in}{*}{*}
\setheadfoot{30pt}{26pt}
\setheaderspaces{*}{30pt}{*}
\setmarginnotes{0.2in}{1.8in}{1cm}
%%% marginpar on right OR twosided
% \setlrmargins{0.75in}{*}{*}
%%% marginpar on left
\setlrmargins{2.75in}{*}{*}
\checkandfixthelayout
%
\usepackage{multicol}
\usepackage{lipsum}
\newcommand{\sampletext}{This is a short sample text
longer than one line but shorter than a typical paragraph
from the lipsum package.}
\newenvironment{TwoCol}{\begin{widematter}\begin{multicols}{2}}{\end{multicols}\end{widematter}}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{First Chapter}
\section{First section}
\lipsum[1]\marginpar{\sampletext}
\lipsum[2]
\begin{TwoCol}
\lipsum[5]
\end{TwoCol}
\section{Second section}
\lipsum[3-4]\marginpar{\sampletext}
\chapter{Second Chapter}
\section{First section}
\lipsum[1]\marginpar{\sampletext}
\lipsum[2-6]\marginpar{\sampletext}
\lipsum[7]
\begin{TwoCol}
\lipsum[1-10]
\end{TwoCol}
\lipsum[4-8]\marginpar{\sampletext}
\end{document}
我发现的非 LaTex 解决方案是使用两个单面“基础文档”(因为没有更好的术语),一个文档包含左侧宽边距的序言,另一个文档包含右侧宽边距的序言,并将大部分内容保存在输入的单独文件中。然后我处理“左”文档和“右”文档,并将它们与以下 Python 脚本合并:
from pyPdf import PdfFileWriter, PdfFileReader
output = PdfFileWriter()
left = PdfFileReader(file("left-test.pdf", "rb"))
right = PdfFileReader(file("right-test.pdf", "rb"))
total_nb_pages = left.getNumPages()
assert left.getNumPages() == right.getNumPages()
for page in range(0, total_nb_pages, 2):
output.addPage(left.getPage(page))
if page + 1 < total_nb_pages:
output.addPage(right.getPage(page + 1))
outputStream = open("combined-test.pdf", "wb")
output.write(outputStream)
outputStream.close()
到目前为止,基于有限的测试,它确实有效......但如果有纯 LaTeX 解决方案就更好了。
答案1
据我所知,双面版本的唯一问题是环境adjustwidth*
无法在分页符上工作。
事实上,的实现adjustwidth*
并不是为了适应分页符,所以您需要一些不同的东西。
幸运的是,有一个用于此目的的包:加载
\usepackage{adjmulticol}
我可以定义
\newenvironment{TwoCol}{\small\begin{adjmulticols}{2}{0in}{-2in}}{\end{adjmulticols}}
(widematter
不再需要)。
这似乎给出了一个可接受的结果(使用版本twoside
):