我正在编辑一位学者的论文集。为此,我发现在文章的第一版中标明分页符非常有用(即使不是必需的),这样这些文章的某些段落在其他文本(尤其是较旧的文本)中的引用仍然有效且可行。这是我的 MWE 示例:
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{scrlayer-scrpage}
\ohead{\textbf{\pagemark}}
\ihead{\textit{\theoldpage}}
\ofoot{}
\pagestyle{scrheadings}
\newcounter{oldpage}
\setcounter{oldpage}{1}
\newcommand{\markoldpage}{
[mark]
\marginpar{\begin{center}\footnotesize\theoldpage\end{center}}
\stepcounter{oldpage}
}
\begin{document}
\chapter{Chapter}
\markoldpage{} This is the first oldpage. \markoldpage{} Now the second oldpage has begun.
\newpage
\lipsum \markoldpage{} \lipsum \markoldpage{}
\end{document}
我所实现的是定义一个新的计数器oldpage
。每个章节都以新文章开始。因此,oldpage
每次开始新章节时,我都会手动设置计数器。某种 ›[mark]‹ 符号表示旧文本中的分页符。然后,旧页码也会显示在页边距中。然后,计数器oldpage
会设置在头部,与普通页码计数器完全相反(例如,如果一本书中的页码计数器位于顶部外侧,则旧页码计数器位于顶部内侧)。我使用 实现了这一点scrlayer-scrpage
。
我希望 oldpage-counter 是上下文相关的,这意味着它应该按照以下方式运行:
- 如果新页面中引用了一个旧页面,则旧页面计数器应仅显示数字(例如›1‹)
- 如果新页面引用了两个旧页面,则旧页面计数器应显示以空格和逗号分隔的数字(例如›1,2‹)
- 如果新页面引用了三个或更多旧页面,则旧页面计数器应显示用双破折号连接的第一个和最后一个数字(例如›1--3‹)
我想,要编写预期行为,就必须使用条件,而这些条件可能需要有关最终输出页面上将有多少旧分页符的信息。我的问题是:
- 哪里可以得到这些信息?如何引用这些信息?我一点头绪都没有,也不知道从哪里开始找。
如果有人能帮助我完成第一步并帮助我编写一些代码,我将非常感激。
答案1
TeX 的标记系统提供了一种方法来跟踪应在页面头中注册的值。
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{scrlayer-scrpage}
\ohead{\textbf{\pagemark}}
\def\lastoldpagemark{\topmarks\oldpagemark}
\ihead{\textit{\lastoldpagemark\ifnum\lastoldpagemark<\botmarks\oldpagemark--\botmarks\oldpagemark\fi
\xdef\lastoldpagemark{\botmarks\oldpagemark}}}
\ofoot{}
\pagestyle{scrheadings}
\newmarks\oldpagemark % etex marks not completely reliable in latex, but probably OK here
\newcounter{oldpage}
\setcounter{oldpage}{1}
\newcommand{\markoldpage}{%%%
[mark]%%%
\marks\oldpagemark{\theoldpage}\marginpar{\centering\footnotesize\theoldpage}%%%
\stepcounter{oldpage}%%%
}
\begin{document}
\chapter{Chapter}
\markoldpage{} This is the first oldpage. \markoldpage{} Now the second oldpage has begun.
\newpage
\lipsum \markoldpage{} \lipsum \markoldpage{}
\end{document}