如何获得自定义页码

如何获得自定义页码

我需要为文档的页面制定一个特殊的编号方案。给定任意整数 n 和 k(k 不为 0 且不为 1),第一个(逻辑)页面必须编号为 n,后续(逻辑)页面必须编号为 n+k、n+2k、n+3k、...

因此,例如,对于 n=10 和 k=-3,文档的页面必须编号为 10,7,4,1,-2,-5,-8,...

该解决方案必须与 、hyperref和类似命令兼容,还必须在 ToC、LoF 和 LoT 等列表中生成正确的值。\ref\pageref

理想情况下,必须通过调用命令来获取编号\numberingschema{<initial value>}{<step>}

答案1

以下内容可能足以在文档中设置内容 -\thepage用于页脚和目录,因此包含基于和的可扩展计算\initpage。引入了\pagestep附加内容以允许一个文档中有多个架构。pageschema

在此处输入图片描述

\documentclass{article} 

\usepackage{xfp,regexpatch}
\usepackage{lipsum}% Just for this example
\usepackage[paper=a6paper]{geometry}% Just for this example

\newcounter{pageschema}\renewcommand{\thepageschema}{\alph{pageschema}}
\renewcommand{\thepage}{\fpeval{\initpage+\pagestep*(\value{page}-1)}}

\newcommand{\pagenumberingschema}[2]{%
  \clearpage
  \stepcounter{pageschema}% New page schema
  \def\initpage{#1}% Store initial page value
  \def\pagestep{#2}% Store page step
  \setcounter{page}{1}% New page schema start
  \ignorespaces
  }
\AtBeginDocument{\pagenumberingschema{1}{1}}% Initialize page numbering schema

\usepackage{hyperref}

\makeatletter
% Update the hyperlink anchors to include page schema
\xpatchcmd*{\Hy@EveryPageAnchor}{page.}{page.\thepageschema.}{}{}
\makeatother

\sloppy% Just for this example

\begin{document} 

\tableofcontents

\section{First page schema}
\lipsum[1-10]

\pagenumberingschema{7}{-3}
\section{Second page schema A}
\lipsum[1-20]
\section{Second page schema B}
\lipsum[21-40]
\section{Second page schema C}
\lipsum[41-50]

\pagenumberingschema{7}{17}
\section{Third page schema A}
\lipsum[1-20]
\section{Third page schema B}
\lipsum[21-40]
\section{Third page schema C}
\lipsum[41-50]

\end{document}

更新hyperref页面锚点确保 PDF 链接正常。此外,强制\clearpage作为 的一部分插入\pagenumberingschema,这似乎是合乎逻辑的要求。

答案2

好问题。我假设设置就足够了,\thepage因为它在引用中用到。它似乎至少在加载后有效hyperref,但我没有对其进行更多测试(我对那部分有点不确定)。

\documentclass{article}
\makeatletter
\newcount\ncnt
\newcount\kcnt
\def\numberingschema#1#2{%{<initial value>}{<step>}
  \ncnt=#1
  \kcnt=#2
  \c@page=0
}
\def\thepage{\@arabic{\numexpr \ncnt+\c@page*\kcnt\relax}}
\makeatother
\usepackage{hyperref}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\numberingschema{5}{-3}
\tableofcontents

\section{Just a section to separate from TOC}
See Section \ref{sec:2} on page \pageref{sec:2} or Section \ref{sec:2-2} on page \pageref{sec:2-2}
\newpage 

\section{First section}
\label{sec:1}
\newpage


\section{Second section}
\label{sec:2}
\newpage

\section{Third section}
\label{sec:3}
\newpage

\section{Forth section}
\label{sec:4}
\newpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\numberingschema{25}{17}
\section{Second First section}
\label{sec:2-1}
\newpage

\section{Second Second section}
\label{sec:2-2}
\newpage

\section{Second Third section}
\label{sec:2-3}
\newpage

\end{document}

在此处输入图片描述

相关内容