Ich habe mehrere Beiträge und Fragen von Leuten gefunden, dieentfernender vertikale Abstand wird automatisch zum Abbildungsverzeichnis hinzugefügt, mein Problem ist aber (genau) das Gegenteil:
Ich verwende die scrartcl
Dokumentklasse mit Abschnitten als Trennzeichen der höchsten Ebene. In meinem Abbildungsverzeichnis gibt es keine Trennung zwischen den Abbildungen verschiedener Abschnitte.
Wie kann ich eine solche visuelle Trennung hinzufügen?
Sehen Sie sich das folgende minimal funktionierende Beispiel und die Ausgabe unten an:
\documentclass[11pt,a4paper]{scrartcl}
\usepackage{amsmath}
\numberwithin{figure}{section}
\begin{document}
\listoffigures
\section{Section}
\begin{figure}[ht]\caption{Figure}\end{figure}
\begin{figure}[ht]\caption{Figure}\end{figure}
\section{Section}
\begin{figure}[ht]\caption{Figure}\end{figure}
\end{document}
Antwort1
Sie müssen den \@startsection
Befehl patchen. Patchen \section
ist auch möglich, würde aber auch für einen Leerzeichenbefehl hinzufügen \section*
. Keine große Sache, aber wenn es sich vermeiden lässt, umso besser.
\documentclass[11pt,a4paper]{scrartcl}
\usepackage{amsmath}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@startsection}
{\@dblarg}
{\artemis@space@loft{#2}\@dblarg}
{}{}
\newcommand{\artemis@space@loft}[1]{%
\ifnum#1=\sectionnumdepth
\doforeachtocfile[float]{%
\addtocontents{\@currext}{\protect\addvspace{\@sectionlistsgap}}%
}%
\fi
}
\newcommand{\@sectionlistsgap}{5pt} % <-- change here the desired gap
\makeatother
\numberwithin{figure}{section}
\begin{document}
\listoffigures
\section{Section}
\begin{figure}[ht]\caption{Figure}\end{figure}
\begin{figure}[ht]\caption{Figure}\end{figure}
\section{Section}
\subsection{SUB}
\begin{figure}[ht]\caption{Figure}\end{figure}
\end{document}
Erklärung: \@dblarg
wird nur ausgeführt, wenn wir \section
ohne haben *
; daher fügen wir vor der Ausführung durch TeX hinzu, \artemis@space@loft
wodurch eine vertikale Leerzeichenannotation in die .lof
und .lot
-Dateien eingefügt wird. Dies ist dasselbe, was die book
Klasse für tut \chapter
(dort wird 10pt verwendet, in einem Artikel scheint ein kleinerer Abstand angemessener). Es verwendet eine von vorgeschlagene TechnikJohannes_Bdas eine Funktion von Koma-Script ausnutzt; auf diese Weise erfahren auch neu definierte Float-Typen die gleiche Behandlung.
Der Parameter #2
bis \@startsection
ist die Abschnittsebene, daher prüfen wir, ob er mit identisch ist \sectionnumdepth
. Für article
sollte man im Hauptteil \@ne
von anstelle von verwenden .\sectionnumdepth
\artemis@space@loft
Ich habe es hinzugefügt, \subsection
um zu überprüfen, ob der Abstand nur für Abschnitte hinzugefügt wird (und das wird er).
Wichtiges Update für KoMaScript Version 3.14
Wenn die neu veröffentlichte Version 3.14 von KoMaScript-Klassen und -Paketen installiert wurde, funktioniert der obige Patch nicht mehr.
Für diese Version muss man ändern
\patchcmd{\@startsection}
{\@dblarg}
{\artemis@space@loft{#2}\@dblarg}
{}{}
hinein
\patchcmd{\scr@startsection}
{\scr@section@dblarg}
{\artemis@space@loft{#2}\scr@section@dblarg}
{}{}
Danke an Johannes_B, dass er es so früh bemerkt hat (die neue Version wurde am 8. Dezember 2014 in TeX Live hochgeladen).
Wenn beide Patches für eine Zusammenarbeit erforderlich sind, wenn eine der Parteien KoMaScript noch nicht aktualisiert hat, dann
\makeatletter
\ifdefined\scr@startsection
\patchcmd{\scr@startsection}
{\scr@section@dblarg}
{\artemis@space@loft{#2}\scr@section@dblarg}
{}{}
\else
\patchcmd{\@startsection}
{\@dblarg}
{\artemis@space@loft{#2}\@dblarg}
{}{}
\fi
\newcommand{\artemis@space@loft}[1]{%
...
tun sollte.