KOMA-Skript-Etoc-Paket ändert den vertikalen Abstand zwischen Inhaltsverzeichnisüberschrift und Einträgen

KOMA-Skript-Etoc-Paket ändert den vertikalen Abstand zwischen Inhaltsverzeichnisüberschrift und Einträgen

Basierend auf der FrageKOMA-script-Listen und LOF haben ungleichen Platz unter der ÜberschriftIch habe das Beispiel um ein TOC erweitert. Ich verwende in meinem Dokument das etoc-Paket und die KOMA-Option parskip=halfändert den vertikalen Abstand zwischen dem TOC-Kapiteltitel und den TOC-Einträgen. Der Abstand von LOF, LOF ... bleibt gleich. Wie kann man diese Inkompatibilität vermeiden? Die Bilder sollten das Problem verdeutlichen. Vielen Dank im Voraus!

Bildbeschreibung hier eingeben

Edit: Ich kompiliere mit xelatex

MWE:

\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}

Antwort1

tocbasicIn den Listen, die von (lof, lot, lol) gesteuert werden, \parskipwird ein Final eingefügt, bevor der Absatzabstand ausgeschaltet wird. Diese Einfügung kann deaktiviert werden durch

\doforeachtocfile{\setuptoc{#1}{noparskipfake}}

Allerdings ist dann zwischen der Listenüberschrift und dem ersten Eintrag weniger vertikaler Abstand als zwischen normalen Kapitelüberschriften und normalem Text.

Daher wäre es besser, dies \parskipvor dem Ausschalten des Absatzabstands zum Inhaltsverzeichnis (toc) hinzuzufügen, das von gesteuert wird etoc. Dies \etocscrbookstylewird von nicht \parskipberücksichtigt. Sie können jedoch einen Patch verwenden, \etocscrbookstyleum den entsprechenden Code hinzuzufügen \parskip(kopiert von 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

Beispiel:

\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}

Bildbeschreibung hier eingeben

verwandte Informationen