将文本宏的起始值和结束值放置在页面的页眉中

将文本宏的起始值和结束值放置在页面的页眉中

背景:我正在使用回忆录类编辑历史手稿的抄本。抄本包括原始手稿的页码,这些页码以粗体显示在每页开始的位置的方括号内。这些起始点可以在抄本页面的任何位置。抄本页面上可以有零个、一个或两个新页码。页码“编号”不是纯数字,因此不能存储在计数器中。页码编号是使用文本中的自定义命令插入的,\folio

期望结果:对于每一页,我希望让页眉显示该页上出现文本的页码范围。因此,如果一页上的第一行文本来自页码 5a,然后往下几行是页码 6,占据了页面的其余部分,我希望页眉显示“页码 5a-6”。

下面的 MWE 接近成功,但还不够。它遇到了两个问题。

首先——我过去常常AtBegShi将每页的最后一个页码放入一个变量中。但页面输出仅在页面的最后一行完全处理后才运行。如果该行继续到下一页,并包含\folio在下一页上显示的命令,则前一页的页码范围将被错误打印,如输出的第 (1) 页和第 (8) 页。

第二页 - 查看第 (10) 页,该页以页码编号 [10] 开始,但在页眉中显示以 9 开​​始的页码范围,因为该页面从技术上讲在处理页码编号 [10] 之前开始。

我该如何解决这两个问题?

基本上,同样的问题之前也曾被问过并得到过回答(链接如下),但答案已经有十年了,而且使用了不同的包和类,有些已经过时了。无论如何,我都搞不清楚如何将以前的任何解决方案应用于我的问题。

在页面开始时保存文本宏的值。

在页眉中显示页面上的部分范围

章节编号 (\thesection) 和名称具有下一页的值

如何定义在页面主体或文本列的开始和结束时执行的宏?

\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}

相关内容