使用 \include 来显示未编号的章节和部分->目录混乱?

使用 \include 来显示未编号的章节和部分->目录混乱?

我想要一份具有以下先决条件的文档:

  • 单独文件中的部分 ->\include{}

  • 章节和部分未编号 -> 使用\addchap{}\addsec{}

  • 章节标题只能出现在目录中

对于未出现的章节标题,我采用并修改了用户 egreg 的绝妙解决方案:

无标题的章节

删除任何一个先决条件都会得到一个合理的目录。三个先决条件都会导致混乱。它就像一个反向波罗米安环。我的主要文档如下所示:

\documentclass[english, a4paper, 12pt]{scrbook}
\usepackage[english]{babel}
\usepackage{blindtext}      


\begin{document}
\makeatletter
 \newcommand\nochap[1]{%
  \begingroup
  \let\@makeschapterhead\@gobble % make \@makechapterhead do nothing
  \addchap{#1}
  \endgroup
  }
\makeatother

\tableofcontents

\nochap{That'n'those}
\include{alottatext}
\include{alottamoretext}
\end{document}

alottatext 看起来像:

\addsec{alottatext}
\blindtext

使用此选项,目录如下所示:

很多文字

那那些

很多文字

而预期的结果应该是:

那那些

很多文字

很多文字

因此它总是将第一章的位置向下移动。hyperref仍然可以正常工作。

我知道这是一个相当令人困惑的问题但也许有人可以帮助确定正确的顺序。

答案1

如果您使用的是 KOMA-Script 3.17 或更早版本,则必须用 替换\include{...}\clearpage\input{...}如果您不希望加载文件的内容从新页面开始,则仅使用\input{...}

使用 KOMA-Script 3.18 或更新版本时,目录条目的顺序没有问题。但删除章节标题的代码不再起作用。因此,您必须将的定义更改\nochap

\newcommand\nochap[1]{%
  \cleardoublepage
  \addchaptertocentry{}{#1}%
}

请注意,此代码也适用于旧版 KOMA-Script。

\begin{filecontents*}{alottatext.tex}
\addsec{alottatext}
\blindtext
\end{filecontents*}

\begin{filecontents*}{alottamoretext.tex}
\addsec{alottamoretext}
\blindtext
\end{filecontents*}

\documentclass[english, a4paper, 12pt]{scrbook}
\usepackage[english]{babel}
\usepackage{blindtext}

\newcommand\nochap[1]{%
  \cleardoublepage
  \addchaptertocentry{}{#1}%
}

\begin{document}
\tableofcontents
\nochap{That'n'those}

\clearpage\input{alottatext}

\clearpage\input{alottamoretext}
\end{document}

在此处输入图片描述


为了确保它与定义中的hyperref使用一起工作:\phantomsection\nochap

\newcommand\nochap[1]{%
  \cleardoublepage
  \ifundefinedorrelax{phantomsection}{}{\phantomsection}%
  \addchaptertocentry{}{#1}%
}

示例(无\clearpagebefore \input):

\begin{filecontents*}{alottatext.tex}
\addsec{alottatext}
\Blindtext[10]
\end{filecontents*}

\begin{filecontents*}{alottamoretext.tex}
\addsec{alottamoretext}
\Blindtext[10]
\end{filecontents*}

\documentclass[english, a4paper, 12pt]{scrbook}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage{hyperref}

\newcommand\nochap[1]{%
  \cleardoublepage
  \ifundefinedorrelax{phantomsection}{}{\phantomsection}%
  \addchaptertocentry{}{#1}%
}

\begin{document}
\tableofcontents
\nochap{That'n'those}

\input{alottatext}
\input{alottamoretext}
\end{document}

相关内容