除非章节只有一页长,否则向左打开的章节

除非章节只有一页长,否则向左打开的章节

我正在使用该类memoir,并希望新章节从左侧页面开始,除非相关章节只有一页长。两者都openleft没有openany给出此行为。如果我可以通过这样做获得此行为,我并不反对使用其他类或使用部分而不是章节。

答案1

此行为的实现需要知道章节的长度。然后它可以在章节的开头和结尾放置参考资料,并计算页数。

memoir(或标准 LaTeX 类)用于\chapter标记章节的开始。但是没有标记来结束章节。因此必须猜测章节的结尾。例如,章节结束于:

  • 下一个\chapter
  • 下一个\part
  • 文档结束。

该解决方案使用绝对页码和绝对章节号,以避免出现非唯一页码和章节号(带星号的章节等)的问题。我使用包来zref处理参考文献,因为它提供了更多的控制权,可以控制写入的内容(只需要绝对页码作为参考数据)和写入方式。输出最后一页后,延迟写入不起作用,因此zref使用立即包装器。下次输出时延迟写入(参见\label)是没有必要的,因为我们知道页码位于页面的开头。

\documentclass{memoir}

\usepackage{zref-abspage}
\usepackage{atveryend}

\makeatletter
% Because of starred chapters we need an extra chapter counter
% for identifying a chapter. \thechapter is not unique in general.
\newcounter{abschap}
\renewcommand*{\theabschap}[1]{abschap.\the\value{abschap}.#1}

\renewcommand*{\clearforchapter}{%
  \EndChapter
  \stepcounter{abschap}%
  \zref@refused{\theabschap{beg}}%
  \zref@refused{\theabschap{end}}%
  \def\ClearChapter{\cleartoverso}%
  \zref@ifrefundefined{\theabschap{beg}}{%
  }{%
    \zref@ifrefundefined{\theabschap{end}}{%
    }{%
      \ifnum\numexpr
        \zref@extract{\theabschap{end}}{abspage}%
        -\zref@extract{\theabschap{beg}}{abspage}%
      = 1 %
        \let\ClearChapter\@empty
      \fi
    }%
  }%
  \ClearChapter
  \zref@wrapper@immediate{%
    \zref@labelbyprops{\theabschap{beg}}{abspage}%
  }%
}
\newcommand*{\EndChapter}{%
  % flush floats
  \clearpage
  % Set an anchor after the last page with contents of the current
  % chapter.
  \zref@wrapper@immediate{%
    \@ifundefined{\theabschap{end}}{%
      \zref@labelbyprops{\theabschap{end}}{abspage}%
      \global\expandafter\let\csname\theabschap{end}\endcsname\@empty
    }{}%
  }%
}
\AfterLastShipout{\EndChapter}
\newcommand*{\org@part}{}
\let\org@part\part
\renewcommand*{\part}{%
  \EndChapter
  \org@part
}
\makeatother

\begin{document}
Title\newpage  
\tableofcontents
\chapter{A}
Short.
\chapter{B}
Long\newpage
Page B.2
\chapter{C} 
Short.
\chapter{D} 
Long\newpage
Page D.2\newpage
Page D.3
\chapter{E}
Short.  
\end{document}

相关内容