章节首页和末页的编号

章节首页和末页的编号

如何获取章节首页和最后一页的页码?似乎我无法通过 来实现\label,如下面的 MWE 中所示,因为如果我做对了,它们只能为整个文档设置一次。我打算最终在页脚中使用这些数字。

\documentclass{memoir}
\usepackage{lipsum}

\begin{document}

\chapter{chapter one}

\label{firstpage}
[First chapter is from page \pageref{firstpage} to page \pageref{lastpage}.]

\lipsum
\label{lastpage}
\chapter{chapter two}

\label{firstpage}
[Second chapter is from page \pageref{firstpage} to page \pageref{lastpage}.]

\lipsum
\label{lastpage}

\end{document}

答案1

您可以重新定义\chapter来完成工作。您将\finishchapter在最后一章的末尾需要一个。

如果一章填满了一页,可能会出现问题,因此删除

 \label{\thechapter @lastpage}

从下面的代码中删除一行并\finishchapter在章节的最后一个单词后手动添加可能会更好。

\documentclass{memoir}
\usepackage{xparse}

\usepackage{lipsum}

\let\memoirchapter\chapter

\RenewDocumentCommand{\chapter}{soom}{%
  \label{\thechapter @lastpage}%
  \IfBooleanTF{#1}
   {\IfValueTF{#2}{\memoirchapter*[#2]{#4}}{\memoirchapter*{#4}}}%
   {\IfValueTF{#2}
     {\IfValueTF{#3}{\memoirchapter[#2][#3]{#4}}{\memoirchapter[#2]{#4}}}%
     {\memoirchapter{#4}}%
   }%
  \label{\thechapter @firstpage}%
}
\NewDocumentCommand{\chapterfirstpage}{}{%
  \pageref{\thechapter @firstpage}%
}
\NewDocumentCommand{\chapterlastpage}{}{%
  \pageref{\thechapter @lastpage}%
}
\NewDocumentCommand{\finishchapter}{}{%
  \label{\thechapter @lastpage}%
}

\begin{document}

\chapter{chapter one}

[First chapter is from page \chapterfirstpage{} to page \chapterlastpage{}.]

\lipsum

\chapter{chapter two}

[Second chapter is from page \chapterfirstpage{} to page \chapterlastpage{}.]

\lipsum[1-12]

\chapter{chapter three}

[Third chapter is from page \chapterfirstpage{} to page \chapterlastpage{}.]

\lipsum[1-30]

\finishchapter

\end{document}

请注意,正常行为是忽略空白页。

答案2

以下示例使用标准页面样式(称为mystyle)自动更新章节的第一页/最后一页引用。章节页引用存储在计数器中,使用来自的一些宏在每章的开始/结束时进行更新refcount- 它允许人们在计数器中存储引用。

在此处输入图片描述

\documentclass{memoir}
\usepackage{lipsum,refcount}

\newcounter{chapfirstpage}
\newcounter{chaplastpage}

\makepagestyle{mystyle}
\makeoddfoot{mystyle}{}{\thepage{} [Chapter range: \thechapfirstpage--\thechaplastpage]}{}
\makeevenfoot{mystyle}{}{\thepage{} [Chapter range: \thechapfirstpage--\thechaplastpage]}{}

\aliaspagestyle{chapter}{mystyle}% 'chapter' page style should be the same as 'mystyle'
\aliaspagestyle{plain}{mystyle}% 'plain' page style should be the same as 'mystyle'

\let\oldchapter\chapter% Store \chapter
\renewcommand{\chapter}{% Update \chapter
  \ifnum\value{chapter}=0\else% If _not_ the first chapter
    \label{ch\thechapter:lastpage}% Insert an end-of-chapter \label
  \fi
  \clearpage
  \addtocounter{chapter}{1}%
  \label{ch\thechapter:firstpage}% Insert a start-of-chapter \label
  \setcounterpageref{chapfirstpage}{ch\thechapter:firstpage}%
  \setcounterpageref{chaplastpage}{ch\thechapter:lastpage}%
  \addtocounter{chapter}{-1}%
  \oldchapter% ...follow regular \chapter
}

\AtEndDocument{\label{ch\number\value{chapter}:lastpage}}% Issue end-of-chapter (end-of-document) \label
                                                         % for last chapter

\begin{document}

\chapter{chapter one}\lipsum
\chapter{chapter two}\lipsum

\end{document}

当然,您可以使用自己的页面样式...我公然覆盖了chapterplain页面样式,以确保它在所有页脚中列出。

请注意,您必须创建自己的页面引用才能访问此中间文档。在紧急情况下,您可以使用\pageref{ch<num>:firstpage}/\thechapfirstpage\pageref{ch<num>:lastpage}/\thechaplastpage来提取它们,但自动化旨在更新页面样式信息,而不是文档内容信息。

另请注意,根据您的文档构造,我使用

\AtDocumentEnd{...}

插入最后一个页面引用ch<num>:lastpage可能不够(可能是由于文档末尾的浮动位置尚未确定)。但是,它适用于相对基本的情况。当然,atveryend包裹可以用来规避这个问题,或者使用memoir自己lastpage或者lastsheet直接“参考”。

答案3

我找到了一个解决方案,即创建一对宏,可以在每章开头重新定义。这应该可行,但如果有更优雅的方法就更好了。

\documentclass{memoir}
\usepackage{lipsum}
\newcommand{\chapterfirstpage}{}
\newcommand{\chapterlastpage}{}
\begin{document}

\chapter{chapter one}
\renewcommand{\chapterfirstpage}{\pageref{ch1.firstpage}}
\renewcommand{\chapterlastpage}{\pageref{ch1.lastpage}}

\label{ch1.firstpage}
[First chapter is from page \chapterfirstpage{} to page \chapterlastpage{}.]

\lipsum
\label{ch1.lastpage}
\chapter{chapter two}

\renewcommand{\chapterfirstpage}{\pageref{ch2.firstpage}}
\renewcommand{\chapterlastpage}{\pageref{ch2.lastpage}}
\label{ch2.firstpage}
[Second chapter is from page \chapterfirstpage{} to page \chapterlastpage{}.]

\lipsum
\label{ch2.lastpage}

\end{document}

相关内容