背景:我正在使用回忆录类编辑历史手稿的抄本。抄本包括原始手稿的页码,这些页码以粗体显示在每页开始的位置的方括号内。这些起始点可以在抄本页面的任何位置。抄本页面上可以有零个、一个或两个新页码。页码“编号”不是纯数字,因此不能存储在计数器中。页码编号是使用文本中的自定义命令插入的,\folio
。
期望结果:对于每一页,我希望让页眉显示该页上出现文本的页码范围。因此,如果一页上的第一行文本来自页码 5a,然后往下几行是页码 6,占据了页面的其余部分,我希望页眉显示“页码 5a-6”。
下面的 MWE 接近成功,但还不够。它遇到了两个问题。
首先——我过去常常AtBegShi
将每页的最后一个页码放入一个变量中。但页面输出仅在页面的最后一行完全处理后才运行。如果该行继续到下一页,并包含\folio
在下一页上显示的命令,则前一页的页码范围将被错误打印,如输出的第 (1) 页和第 (8) 页。
第二页 - 查看第 (10) 页,该页以页码编号 [10] 开始,但在页眉中显示以 9 开始的页码范围,因为该页面从技术上讲在处理页码编号 [10] 之前开始。
我该如何解决这两个问题?
基本上,同样的问题之前也曾被问过并得到过回答(链接如下),但答案已经有十年了,而且使用了不同的包和类,有些已经过时了。无论如何,我都搞不清楚如何将以前的任何解决方案应用于我的问题。
\documentclass[a4,12pt]{memoir}
\usepackage{lipsum}
\usepackage{extramarks}
\usepackage{atbegshi}
% define page style with folio range in header and page number in footer
\makepagestyle{mystyle}
\makeevenhead{mystyle}{}{\lastleftmark}{}
\makeoddhead{mystyle}{}{\lastrightmark}{}
\makeevenfoot{mystyle}{(\thepage)}{}{}
\makeoddfoot{mystyle}{}{}{(\thepage)}
% command to write folio range in header
\NewDocumentCommand{\foliomarks}{}%
{%
\markboth{\hfill Folios \protect\PrevFolio--\protect\CurrFolio \hfill}{\hfill Folios \protect\PrevFolio--\protect\CurrFolio \hfill}%
}
% command to print folio number in text and save value for header
\NewDocumentCommand{\folio}{m}%
{%
{\textsf{\large{[#1.]}}}%
\xdef\CurrFolio{#1}%
\foliomarks{}%
}
\begin{document}
% initialize folio variables
\xdef\PrevFolio{1}
\xdef\CurrFolio{0}
% copy current folio number to previous folio number at top of each page
\AtBeginShipout{%
\xdef\PrevFolio{\CurrFolio}
}
\pagestyle{mystyle}
\folio{1}
\lipsum[1]\folio{2}
\lipsum[1-3]\folio{3}
\lipsum[1-2]\folio{4}
\lipsum[1]\folio{5}
\lipsum[1-2]\folio{5a}
\lipsum[1]\folio{6}
\lipsum[1-2]\folio{7}
\lipsum[1]\folio{8}
\lipsum[1-20]\folio{9}
\lipsum[1]\clearpage\folio{10}
\lipsum[1]
\end{document}