![页码中的章节号问题](https://linux22.com/image/245003/%E9%A1%B5%E7%A0%81%E4%B8%AD%E7%9A%84%E7%AB%A0%E8%8A%82%E5%8F%B7%E9%97%AE%E9%A2%98.png)
我正在写论文,并使用大学提供的模板。为了获取页码中的章节号,我使用以下命令:
\@addtoreset{page}{chapter}
\renewcommand{\thepage}{\thechapter-\arabic{page}}
章节标题格式化是使用包完成的titlesec
。因此,为了在奇数页中获取新章节,我使用:
\newcommand{\chapterbreak}{\cleardoublepage}
但是,这样做的问题是,每章的最后一页都会用下一章的章节号进行编号。例如,第 2 章的最后一页将用3-0
而不是进行编号2-10
。
在我看来,章节编号正在增加前章节分隔已完成。有什么想法可以修复或解决这个问题吗?
更新 1:我也尝试过chappg
有同样问题的包。
更新 2:最小工作示例:
\documentclass[twoside]{report}
\usepackage{titlesec}
\usepackage{lipsum}\setlipsumdefault{1-3}
\titleclass{\chapter}{straight}
\titleformat{\chapter}[hang]{\bfseries\huge}{\thechapter\quad}{0em}{}
\newcommand{\chapterbreak}{\cleardoublepage}
\makeatletter
\@addtoreset{page}{chapter}
\renewcommand{\thepage}{\thechapter-\arabic{page}}
\makeatother
\begin{document}
\chapter{One}
\lipsum
\chapter{Two}
\lipsum
\chapter{Three}
\lipsum
\end{document}
\cleardoublepage
在我的例子中,由于某种原因它似乎不起作用,但页码问题仍然存在。
答案1
主要问题是\refstepcounter{chapter}
发出的\chapter
会将page
计数器设置为 0,而不是要求的 1。页码是在页面完成并发运时步进的,因此计数器必须从 1 开始。
你必须做一些调整
\documentclass[twoside]{report}
\usepackage{titlesec}
\usepackage{lipsum,etoolbox}
\titleclass{\chapter}{straight}
\titleformat{\chapter}[hang]{\bfseries\huge}{\thechapter\quad}{0em}{}
\makeatletter
\@addtoreset{page}{chapter}
\makeatother
\renewcommand{\thepage}{\thechapter-\number\numexpr\arabic{page}+1\relax}
\patchcmd{\cleardoublepage}{\ifodd}{\unless\ifodd}{}{}
\preto\chapter{\cleardoublepage}
\AtBeginDocument{\setcounter{page}{0}}
\begin{document}
\chapter{One}
\lipsum
\chapter{Two}
\lipsum
\chapter{Three}
\lipsum
\end{document}
我们希望\cleardoublepage
在 之前发出\chapter
,因此我们将代码添加到 的代码前面\chapter
(\chapterbreak
是在错误的时间发出的)。我们还需要修补\cleardoublepage
以反转\ifodd
测试,最后将页面计数器的起始设置为 0。
日志文件中显示的页码将会偏差一,但打印的数字是正确的。