El paquete etoc del script KOMA cambia el espacio vertical entre el encabezado y las entradas del TOC

El paquete etoc del script KOMA cambia el espacio vertical entre el encabezado y las entradas del TOC

Basado en la preguntaLa lista de listados de KOMA-script y LOF tienen espacios desiguales debajo del encabezadoHe ampliado el ejemplo con un TOC. Utilizo el paquete etoc en mi documento y la opción KOMA parskip=halfcambia el espacio vertical entre el título del capítulo TOC y las entradas TOC. El espaciado de LOF, LOF... permanece igual. ¿Cómo evitar esta incompatibilidad? Las imágenes deben ilustrar el problema. ¡Muchas gracias por adelantado!

ingrese la descripción de la imagen aquí

Editar: compilo con 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}

Respuesta1

En las listas bajo control de tocbasic(lof, lot, lol) \parskipse inserta un final antes de desactivar el espaciado entre párrafos. Esta inserción se puede desactivar mediante

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

Pero entonces tiene menos espacio vertical entre el título de la lista y la primera entrada que entre los títulos de capítulo normales y el texto normal.

Por lo tanto, sería mejor agregar este final \parskipantes de que se desactive el espaciado entre párrafos en la tabla de contenido (toc) que está bajo el control de etoc. El \etocscrbookstyleno tiene esto \parskipen cuenta. Pero puedes parchear \etocscrbookstylepara agregar el código relacionado con esto \parskip(copiado de 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

Ejemplo:

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

ingrese la descripción de la imagen aquí

información relacionada