使用没有新页的章节时目录中的页码错误

使用没有新页的章节时目录中的页码错误

因为我不想在新的页面上写章节,所以我{\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

将章节更改stylestyle=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}

相关内容