我发现了一些帖子和问题,人们想要消除垂直间距自动添加到图形列表中,但我的问题却恰恰相反:
我使用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
时执行;因此,在 TeX 执行它之前,我们添加,这会在和文件中添加垂直空间注释。这与类对 所做的相同(那里使用了 10pt,在文章中较小的空间似乎更合适)。它使用了由\section
*
\artemis@space@loft
.lof
.lot
book
\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]{%
...
应该做。