我编写了一个文档类,可以在其中创建标题页。我隐藏了标题页上的页码,因此我的第一个真实页面位于标题页的背面。因此,我希望它是页码 1。但是,使用 来\setcounter{page}{1}
全局减少页码不是一个选项,因为我使用的是 选项twosided
,geometry
并且绑定偏移量是根据页码是偶数还是奇数添加的。由于这个偏移量正是我在保留页码时想要的,因此将其减少一显然会弄乱一切。
因此,我创建了一个自定义宏\myPageNumber
,它总是打印出小于 1 的页码\thepage
,我用它在页脚中打印页码。这很好,但还有一个问题:目录中的页码是由 返回的页码\thepage
,因此它们总是相差 1。
经过谷歌搜索我发现修改目录中的页码但这涉及手动添加每个部分的目录条目等。
我当时的想法基本上是在插入新的目录条目时临时更改页码计数器,并在完成后将其改回正常。为此,我的代码如下所示:
\documentclass{article}
\usepackage{lipsum}
\usepackage{scrlayer-scrpage}
\usepackage{etoolbox}
\newcommand{\myPageNumber}{\the\numexpr\value{page}-1\relax}%
\cfoot{\myPageNumber}
\chead{}
\rehead{}
\rohead{}
\begin{document}
\pretocmd{\addcontentsline}{%
\edef\actualPage{\thepage}%
\setcounter{page}{\myPageNumber}%
}{}{}%
\apptocmd{\addcontentsline}{%
% <MARKER>
\setcounter{page}{\actualPage}%
}{}{}%
\thispagestyle{empty}
\vspace*{\fill}
\begin{center}
\textbf{\Huge My title page}
\end{center}
\vspace{5cm}
\meaning\addcontentsline
\vspace*{\fill}
\newpage
\tableofcontents
\hspace{2cm}
\section{First section}
\lipsum[3-13]
\section{Next section}
\end{document}
问题是,只要我不注释该行% <MARKER>
,页码就不会改变。这对我来说似乎很奇怪,因为这只会改变页码后目录条目已写好(至少这是我对\meaning\addcontentsline
所写内容的解释)。
此时的问题是如何调整我的代码,以便第二个代码\setcounter
不会在写入目录条目之前覆盖第一个代码,或者我如何才能实现目录中列出的页码的交替(而不必手动调整其中的每一个)。