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}

mwe 的输出

答案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时执行;因此,在 TeX 执行它之前,我们添加,这会在和文件中添加垂直空间注释。这与类对 所做的相同(那里使用了 10pt,在文章中较小的空间似乎更合适)。它使用了由\section*\artemis@space@loft.lof.lotbook\chapter约翰内斯·B它利用了 Koma-Script 的一个特性;这样新定义的浮点类型也将得到相同的处理。

参数#2\@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 这么早就注意到了这一点(新版本于 2014 年 12 月 8 日上传到 TeX Live)。

如果两个补丁对于合作工作都是必要的,而其中一方尚未更新 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]{%
...

应该做。

相关内容