当环境跨越页面边界时,奇数/偶数边距的问题

当环境跨越页面边界时,奇数/偶数边距的问题

这个问题,我描述了当它们出现在分页符附近时出现在页面错误的一侧的问题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):

在此处输入图片描述

相关内容