![批判版中的两种不同页数计数器(第 2 部分)](https://linux22.com/image/404919/%E6%89%B9%E5%88%A4%E7%89%88%E4%B8%AD%E7%9A%84%E4%B8%A4%E7%A7%8D%E4%B8%8D%E5%90%8C%E9%A1%B5%E6%95%B0%E8%AE%A1%E6%95%B0%E5%99%A8%EF%BC%88%E7%AC%AC%202%20%E9%83%A8%E5%88%86%EF%BC%89.png)
在这问题,David Carlisle 提供了一些代码来在页眉中创建第二个页面计数器,以指示关键版本的页面和分页符。这很酷。但是,随着文档变得复杂,我遇到了问题。以下是详细说明两个问题的 MWE:
\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{First Chapter}
\markoldpage{} This is the first oldpage.
\markoldpage{} Now the second oldpage has begun.
\lipsum[1]
\lipsum[3] \markoldpage{}
\lipsum \markoldpage{}
\lipsum[1-10] \markoldpage{}
\lipsum[1]
\chapter{Second Chapter}
\section{First Section}
\setcounter{oldpage}{20}
\markoldpage{} This is the first oldpage. \markoldpage{} Now the second oldpage has begun.
\newpage
\lipsum[1-3] \markoldpage{} \lipsum[1-3] \markoldpage{}
\section{Second Section}
\setcounter{oldpage}{17} \markoldpage
\lipsum[1]
\end{document}
- 有时,页面中的 oldpage 计数器下列的新章节不正确,如输出的第二页和第六页所示。有人能帮我理解发生了什么吗?
- 如果我将新物品放在相同的页面包含降低旧页
(例如,使用 a
\section
而不是\chapter
MWE 中所示的 a),那么,当然,页码计数器也不起作用,因为宏只为较大的旧页码指定它。在这种情况下,是否可以使用标记将其排版为:[OldpageSection1],[OldpageSection2]
答案1
新的标记系统描述于标记(也许可以与新的 LaTeX-Companion I,第 390-395 页一起阅读)提供了一种简单的机制来实现所需的结果。
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{scrlayer-scrpage}
\addtokomafont{pagenumber}{\bfseries}
\NewMarkClass{oldpagemark}
\newcounter{oldpage}
\setcounter{oldpage}{1}
\ohead{\pagemark}
\ihead{\IfMarksEqualTF{oldpagemark}{top}{last}{(\TopMark{oldpagemark})}{(\TopMark{oldpagemark}--\LastMark{oldpagemark})}}
\ofoot{}
\pagestyle{scrheadings}
\newcommand{\markoldpage}{¦\stepcounter{oldpage}\InsertMark{oldpagemark}{\theoldpage}\marginpar{\centering\footnotesize\theoldpage}}
\begin{document}
\chapter{First chapter}
\lipsum[1-2] \markoldpage{}
\lipsum[1-10] \markoldpage{}
\lipsum[1-2] \markoldpage{}
\lipsum[1-4] \markoldpage{}
\chapter{Second chapter with new numbering} \setcounter{oldpage}{43}
\lipsum[1-2] \markoldpage{}
\lipsum[1-4] \markoldpage{}
\lipsum[1-2] \markoldpage{}
\lipsum[1-4] \markoldpage{}
\chapter{Third chapter with new numbering} \setcounter{oldpage}{25}
\lipsum[1-2] \markoldpage{}
\lipsum[1-4] \markoldpage{}
\lipsum[1-2] \markoldpage{}
\lipsum[1-4] \markoldpage{}
\end{document}
一些散文描述:自 2022 年起,\NewMarkClass
提供一种标记机制,该机制不会像\topmark
使用 LaTeX 编译时那样遇到 eTeX 的标记和原始 TeX 的标记命令等问题。
新的相应命令\TopMark
,\LastMark
使\InsertMark
LaTeX 能够抓取相关的页码信息而不会造成干扰。
\markoldpage
使用这些功能与计数器(oldpage
),只需通过 即可在正确的位置进行标记\InsertMark
。
\IfMarksEqualTF
然后使用一个简单的条件,也定义在标记以便在页眉中打印正确的信息。粗体数字代表文档的页码,括号中的斜体数字代表旧页码。还添加了表示分页符 (»¦«) 的字符和页边距中的旧页码。
根据页面范围,比如说 »phantom-oldpage-numbering«,如果范围为 1,则在标题中写入单个数字,例如此处的输出页 2 ...
...或者页面范围(如果大于一)例如输出第 10 页。
以前,当我在章节之间更改计数器值时,我就会遇到问题,但到目前为止,这似乎没问题!