![KOMA 脚本 etoc 包更改目录标题和条目之间的垂直间距](https://linux22.com/image/448582/KOMA%20%E8%84%9A%E6%9C%AC%20etoc%20%E5%8C%85%E6%9B%B4%E6%94%B9%E7%9B%AE%E5%BD%95%E6%A0%87%E9%A2%98%E5%92%8C%E6%9D%A1%E7%9B%AE%E4%B9%8B%E9%97%B4%E7%9A%84%E5%9E%82%E7%9B%B4%E9%97%B4%E8%B7%9D.png)
根据问题KOMA 脚本列表和 LOF 标题下方的空间不均等我用目录扩展了示例。我在文档中使用 etoc 包,KOMA 选项parskip=half
会更改目录章节标题和目录条目之间的垂直间距。LOF、LOF... 的间距保持不变。如何避免这种不兼容?图片应该可以说明问题。提前谢谢您!
编辑:我使用 xelatex 编译
梅威瑟:
\documentclass[
10pt,
oneside,
listof=totoc,
bibliography=totoc,
]{scrbook}
\usepackage{scrhack}
\usepackage{setspace}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{etoc}
\onehalfspacing
\KOMAoptions{parskip=half}
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\lstlistoflistings
\chapter{A Chapter}
\begin{figure}
\centering\includegraphics[width=0.5\linewidth]{example-image}
\caption{First figure}
\end{figure}
\begin{table}
\caption{First table}
\centering
\begin{tabular}[width=0.5\linewidth]{ccc}
Cell 1 & Cell 2 & Cell 3
\end{tabular}
\end{table}
\begin{lstlisting}[caption={First listing}]
Some code
\end{lstlisting}
\end{document}
答案1
tocbasic
在受 (lof、lot、lol)控制的列表中,\parskip
在关闭段落间距之前会插入一个结尾。此插入可通过以下方式禁用
\doforeachtocfile{\setuptoc{#1}{noparskipfake}}
但是列表标题和第一个条目之间的垂直空间比正常章节标题和正常文本之间的垂直空间要小。
因此,最好\parskip
在关闭段落间距之前将这个最后的代码添加到目录 (toc) 中,该目录由 控制etoc
。\etocscrbookstyle
不会考虑这一点\parskip
。但您可以修补\etocscrbookstyle
以添加与此相关的代码\parskip
(从 复制tocbasic
):
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\etocscrbookstyle}
{\setlength {\parskip }{\z@ }}
{%
\etoc@Iftocfeature{\@currext}{noparskipfake}{}{%
\ifvmode
\@tempskipa\lastskip
\vskip-\lastskip
\addtolength{\@tempskipa}{\parskip}%
\vskip\@tempskipa
\fi
}%
\setlength {\parskip }{\z@ }%
}{}{\PatchFailed}
\makeatother
\etocstandarddisplaystyle
例子:
\documentclass[
10pt,
oneside,
listof=totoc,
bibliography=totoc,
]{scrbook}
\usepackage{scrhack}
\usepackage{setspace}
\usepackage{graphicx}
\usepackage{listings}
\usepackage{etoc}
\onehalfspacing
\KOMAoptions{parskip=half}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\etocscrbookstyle}
{\setlength {\parskip }{\z@ }}
{%
\etoc@Iftocfeature{\@currext}{noparskipfake}{}{%
\ifvmode
\@tempskipa\lastskip
\vskip-\lastskip
\addtolength{\@tempskipa}{\parskip}%
\vskip\@tempskipa
\fi
}%
\setlength {\parskip }{\z@ }%
}{}{\PatchFailed}
\makeatother
\etocstandarddisplaystyle
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\lstlistoflistings
\chapter{A Chapter}
Some text
\begin{figure}
\centering\includegraphics[width=0.5\linewidth]{example-image}
\caption{First figure}
\end{figure}
\begin{table}
\caption{First table}
\centering
\begin{tabular}[width=0.5\linewidth]{ccc}
Cell 1 & Cell 2 & Cell 3
\end{tabular}
\end{table}
\begin{lstlisting}[caption={First listing}]
Some code
\end{lstlisting}
\end{document}