
На основании вопросаСписок листингов KOMA-script и LOF имеют неравное расстояние под заголовкомЯ расширил пример с помощью TOC. Я использую пакет etoc в своем документе, а опция KOMA parskip=half
изменяет вертикальный интервал между заголовком главы TOC и записями TOC. Интервал 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}