显然,KOMA 类缺乏添加第二个目录(例如简短的目录)的可能性,而回忆录则像下面采用的示例一样。另请参阅在简短目录中包含详细内容条目吗?
尽管如此,我想使用它,scrbook
但详细的目录却没有打印出来。有人知道可以与之配合使用的实现pdfpages
吗?
\documentclass{scrbook}
\begin{document}
{\renewcommand*{\contentsname}{Short Contents}
\setcounter{tocdepth}{0}
\tableofcontents
}
\tableofcontents
\chapter{Intro}
\section{Sub A}
\section{Sub B}
\end{document}
评论
pdfpages
包(带有)的使用addtotoc=...
似乎与不兼容etoc
,而其本身可以作为一种解决方案。
答案1
您可以使用 KOMA-Script 包scrwfile
:
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{scrwfile}
\TOCclone[Short Contents]{toc}{stoc}
\addtocontents{stoc}{\protect\value{tocdepth}=0}% or \BeforeStartingTOC[stoc]{\value{tocdepth}=0}
\begin{document}
\listofstoc
\tableofcontents
\chapter{Intro}
\section{Sub A}
\section{Sub B}
\end{document}
另一种可能性是修补\addtocentrydefault
将所有 ToC 条目写入扩展名为 的新文件中.stoc
。
\documentclass{scrbook}
\usepackage[english]{babel}
\addtotoclist[\jobname]{stoc}
\BeforeStartingTOC[stoc]{\value{tocdepth}=0}
\usepackage{xpatch}
\xapptocmd\addtocentrydefault
{\addxcontentsline{stoc}{#1}[#2]{#3}}
{}{\PatchFailed}
\begin{document}
\listoftoc[Short Contents]{stoc}
\tableofcontents
\chapter{Intro}
\section{Sub A}
\section{Sub B}
\addchap{Test}
\end{document}
如果目录应该在“简短内容”中获得一个条目,则将以下几行添加到上述示例的序言中:
\BeforeStartingTOC[toc]{%
\addxcontentsline{stoc}{chapter}{\protect\contentsname}%
}
答案2
使用来自这个帖子。因为您希望它与 babel 一起工作,所以您必须注意 babel 命令。
似乎包含 babel 也会破坏的分组,因此在发出第二个之前tocdepth
您可能需要这样做。\setcounter{tocdepth}{2}
\tableofcontents
\documentclass{scrbook}
\usepackage[english]{babel}
\begin{document}
{
\makeatletter
\renewcommand*{\contentsname}{Short Contents}
\setcounter{tocdepth}{0}
\expandafter\def\csname @starttoc\endcsname#1{\InputIfFileExists{\jobname.#1}{}{}}\tableofcontents
\makeatother
}
\tableofcontents
\chapter{Intro}
\section{Sub A}
\section{Sub B}
\end{document}
答案3
要读取toc
文件两次,您必须避免在第二次读取之前打开它进行写入。 LaTeX 的内核宏\@starttoc
(由 使用\tableoofcontents
)通常也会打开文件进行写入。 加载scrwfile
如图所示esdd 的回答\@starttoc
已经避免在使用时打开文件进行写入。此外,还\@starttoc
进行了局部重新定义,如TeXnician 的回答可以用来避免打开用于书写的文件。另一个建议是停用 LaTeX 打开用于书写的辅助文件,例如:
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{scrwfile}
\usepackage{mwe}% provides \Blinddocument
\makeatletter
\newcommand*{\shorttableofcontents}{%
\begingroup
\value{tocdepth}=\z@ % set tocdepth locally to zero
\@fileswfalse % deactivate opening of auxiliary files
\listoftoc[Short Contents]{\ext@toc}%
\endgroup
}
\makeatother
\begin{document}
\shorttableofcontents% must be before \tableofcontents
\tableofcontents
\Blinddocument
\end{document}
这里使用 KOMA-Script\listoftoc
来显示目录的简短版本。有关更多信息,请参阅手册。
\shorttableofcontents
但是如果在之后使用,这个建议会失败\tableofcontents
!并且您无法将普通目录中未显示的额外条目添加到简短目录中。如果您需要这样的东西,esdd 的答案将是更好的建议。
但是您可以使用另一个 KOMA-Script 宏来克隆主 ToC:
\documentclass{scrbook}
\usepackage[english]{babel}
\usepackage{scrwfile}
\usepackage{mwe}% provides \Blinddocument
\DeclareNewTOC[%
listname={Short Contents},
]{stoc}
\makeatletter
\renewcommand{\addtocentrydefault}[3]{%
\expandafter\tocbasic@addxcontentsline\expandafter{\ext@toc}{#1}{#2}{#3}%
\tocbasic@addxcontentsline{stoc}{#1}{#2}{#3}%
}
\makeatother
\BeforeStartingTOC[stoc]{\value{tocdepth}=0\relax}
\let\shorttableofcontents\listofstocs
\begin{document}
\shorttableofcontents
\tableofcontents
\Blinddocument
\end{document}
KOMA-Script 用于生成所有标题的目录条目。但是,如果包不使用(例如直接使用)\addtocentrydefault
来生成目录条目,则此方法不起作用。\addtocentryefault
\addcontentsline
您可以尝试修补它,而不必重新定义\addtocentrydefault
,如 esdd 的第二个建议所示。
答案4
啊,抱歉,在看到您的pdfpages
评论之前就发了这篇文章。如果与 不兼容,也许这应该是另一个问题的主题etoc
?(展示问题的 mwe 会很有帮助)
\documentclass{scrbook}
\usepackage{etoc}
\begin{document}
{\renewcommand*{\contentsname}{Short Contents}
\etocsetnexttocdepth{chapter}
\tableofcontents
}
\tableofcontents
\chapter{Intro}
\section{Sub A}
\section{Sub B}
\end{document}