![使用没有新页的章节时目录中的页码错误](https://linux22.com/image/385073/%E4%BD%BF%E7%94%A8%E6%B2%A1%E6%9C%89%E6%96%B0%E9%A1%B5%E7%9A%84%E7%AB%A0%E8%8A%82%E6%97%B6%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E9%A1%B5%E7%A0%81%E9%94%99%E8%AF%AF.png)
因为我不想在新的页面上写章节,所以我{\let\clearpage\relax \chapter{Foo}}
按照建议的方式编写了它们另一个线程。不幸的是,当某个章节(巧合地)从新页面开始时,这会弄乱目录中各章节的页码。我创建了一个最小工作示例,但存在以下问题:
\documentclass[]{scrreprt}
\usepackage{lipsum}
\begin{document}
\tableofcontents
\chapter{Foo}
\lipsum[1-4]
{\let\clearpage\relax \chapter{Bar}}
\section{Barsub}
\lipsum[5]
\end{document}
如您所见,“酒吧”一章的页码是 2,而不是 3。但请注意,该部分的页码是正确的。
我尝试通过在\pagebreak
章节前添加 来解决这个问题,但它改变了布局(在更复杂的文档中)。\setcounter{page}{3}
在章节“Bar”前添加 也不起作用。
如何在不改变布局的情况下修复页码?如有必要,我愿意部署“肮脏”的解决方法,手动增加页码。
答案1
将章节更改style
为style=section
:
看起来章节应该像节一样运行:
\documentclass{scrreprt}
\usepackage{lipsum}
\RedeclareSectionCommand[
style=section,
indent=0pt
]{chapter}
\begin{document}
\tableofcontents
\cleardoublepage
\chapter{Foo}
\lipsum[1-4]
\chapter{Bar}
\section{Barsub}
\lipsum[5]
\chapter{Barfoo}
\section{Barfoosub}
\lipsum[6]
\end{document}
但请注意,目录标题之前和章节 »Foo« 之前没有垂直空格。
声明一个新的切片命令:
也许您想要在章节级别上使用额外的分段命令,但是使用style=section
:
\documentclass{scrreprt}[2017/09/07]
\usepackage{lipsum}
\DeclareNewSectionCommand[
style=chapter,
level=\chapternumdepth,
tocstyle=chapter,
tocindent=0pt,
tocnumwidth=1.5em
]{mychapter}% clone \chapter as \mychapter
\RedeclareSectionCommand[
style=section,
indent=0pt
]{mychapter}% change the style to section
\makeatletter
\let\c@mychapter\c@chapter% use the same counter for chapter and mychapter
\def\cl@mychapter{\cl@chapter}% use the same reset list as chapter
\makeatother
\begin{document}
\tableofcontents
\chapter{Foo}
\lipsum[1-4]
\mychapter{Bar}
\section{Barsub}
\lipsum[5]
\mychapter{Barfoo}
\section{Barfoosub}
\lipsum[6]
\end{document}
如果文档中使用了页面样式headings
,则必须\let\mychaptermark\chaptermark
在第一个之后添加\pagestyle{headings}
:
\pagestyle{headings}
\let\mychaptermark\chaptermark
或者使用包scrlayer-scrpage
:
\usepackage[automark]{scrlayer-scrpage}
\automark*{mychapter}% note the *
答案2
如果您重新定义核心命令,\clearpage
那么您可以预料到会出现问题,您使用的类中的章节标题代码是假设它位于页面顶部而编写的。下面的代码同样是错误的,但在这里有效。正确的方法是重新设计页内标题的章节标题代码,但如果您只是想要快速修补,这种方法是可行的。
实际上更简单的方法是使用文章类而不是报告,并且使用顶级标题,\section
通常不会强制分页。
\documentclass[]{scrreprt}
\usepackage{lipsum}
\begin{document}
\tableofcontents
\chapter{Foo}
\lipsum[1-4]
{\noindent\parbox[t]{\textwidth}{\chapter{Bar}}}\csname @afterheading\endcsname
\section{Barsub}
\lipsum[5]
\end{document}