Я нашел несколько сообщений и вопросов от людей, желающихудалятьвертикальный интервал автоматически добавляется к списку цифр, но моя проблема (ровно) противоположная:
Я использую scrartcl
класс документа с разделами как разделитель самого высокого уровня. В моем списке фигур нет разделения между фигурами разных разделов.
Как можно добавить такое визуальное разделение?
Ниже приведен минимальный рабочий пример и вывод:
\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}
решение1
Вам нужно пропатчить \@startsection
команду; пропатчить \section
тоже можно, но это добавит команду пробела также для \section*
. Не такая уж большая проблема, но если можно этого избежать, то лучше.
\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}
Объяснение: \@dblarg
выполняется только тогда, когда у нас есть \section
без *
; поэтому, прежде чем TeX выполнит его, мы добавляем \artemis@space@loft
, который добавляет аннотацию вертикального пробела в файлы .lof
и .lot
. Это то же самое, book
что делает класс для\chapter
(там используется 10pt, в статье меньший пробел кажется более подходящим). Он использует технику, предложеннуюЙоханнес_Бкоторый использует функцию Koma-Script; таким образом, вновь определенные типы float будут обрабатываться так же.
Параметр #2
to \@startsection
— это уровень раздела, поэтому мы проверяем, что он такой же, как \sectionnumdepth
. Для article
одного следует использовать \@ne
вместо \sectionnumdepth
в теле \artemis@space@loft
.
Я добавил \subsection
, чтобы проверить, что интервал добавляется только для разделов (и это так).
Важное обновление для KoMaScript версии 3.14
После установки новой версии 3.14 классов и пакетов KoMaScript указанный выше патч перестает работать.
Для этой версии нужно изменить
\patchcmd{\@startsection}
{\@dblarg}
{\artemis@space@loft{#2}\@dblarg}
{}{}
в
\patchcmd{\scr@startsection}
{\scr@section@dblarg}
{\artemis@space@loft{#2}\scr@section@dblarg}
{}{}
Спасибо Johannes_B за то, что он заметил это так рано (новая версия была загружена в TeX Live 8 декабря 2014 г.).
Если оба патча необходимы для совместной работы, когда одна из сторон еще не обновила KoMaScript, то
\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]{%
...
следует сделать.