在我的示例文档中,Koma Script(使用版本 3.11a)和包之间似乎存在一些负面交互lstdoc
。当我注释掉 MWE 时,它工作得很好,\usepackage{lstdoc}
但当我包含它时,目录的格式就乱了。以下是示例文档:
\documentclass[
a4paper,
titlepage
]{scrbook}
\usepackage{lstdoc}
\begin{document}
\tableofcontents
\section{test1}
test test
\end{document}
输出lstdoc
如下
而使用包含的包时会发生这种情况:
有没有办法解决这个问题?我想要这条线,因为我正在使用glossaries
包的替代方案问题这需要lstdoc
包。我注意到,如果使用,hyperref
也会被拉进来,但单独使用不会引起任何问题。lstdoc
hyperref
答案1
问题是lstdoc.sty
重新定义了一些\l@...
负责排版目录中各部分单元条目的命令系列。例如,\l@section
在中定义lstdoc.sty
为
\newcommand*\l@section[2]{%
\addpenalty\@secpenalty
\addvspace{.25em \@plus\p@}%
\setlength\@tempdima{1.5em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode
\advance\leftskip\@tempdima
\hskip -\leftskip
#1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
\endgroup}
\l@section
而in的定义scrbook.cls
是
\newcommand*\l@section{\bprot@dottedtocline{1}{1.5em}{2.3em}}
为了恢复原始定义,您可以将\l@...
文档前言中的命令重新定义为 使用的命令scrbook.cls
。例如:
\documentclass[a4paper,titlepage]{scrbook}
\usepackage{lstdoc}
\makeatletter
\renewcommand*\l@section{\bprot@dottedtocline{1}{1.5em}{2.3em}}
\makeatother
\begin{document}
\tableofcontents
\section{test1}
test test
\end{document}
生产
\l@...
这是(直到彩色超链接)原始格式。对于与将进入目录的其他部分单元相对应的其他一些命令,以及由 lstdoc.sty 重新定义的 \l@... 命令,也必须进行类似的重新定义。
以下示例代码显示了获取从\chapter
到 的ToC 条目的原始格式所必需的重新定义\subparagraph
:
\documentclass[a4paper,titlepage]{scrbook}
\usepackage{lstdoc}
% all sectional units will be numbered and will go to the ToC
\setcounter{secnumdepth}{5}
\setcounter{tocdepth}{5}
\makeatletter
\renewcommand*\l@section{\bprot@dottedtocline{1}{1.5em}{2.3em}}
\renewcommand*\l@subsection{\bprot@dottedtocline{2}{3.8em}{3.2em}}
\renewcommand*\l@subsubsection{\bprot@dottedtocline{3}{7.0em}{4.1em}}
\makeatother
\begin{document}
\tableofcontents
\chapter{Test Chapter}
\section{Test Section}
\subsection{Test Subsection}
\subsubsection{Test Subsubsection}
\paragraph{Test Paragraph}
\subparagraph{Test Subparagraph}
\end{document}