Важное обновление для KoMaScript версии 3.14

Важное обновление для KoMaScript версии 3.14

Я нашел несколько сообщений и вопросов от людей, желающихудалятьвертикальный интервал автоматически добавляется к списку цифр, но моя проблема (ровно) противоположная:

Я использую 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 будут обрабатываться так же.

Параметр #2to \@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]{%
...

следует сделать.

Связанный контент