Encontrei vários posts e perguntas de pessoas querendoremovero espaçamento vertical adicionado automaticamente à lista de figuras, mas meu problema é (exatamente) o oposto:
Estou usando a scrartcl
classe document com seções como separador de nível mais alto. Na minha lista de figuras não há separação entre as figuras das diferentes seções.
Como posso adicionar essa separação visual?
Veja o seguinte exemplo de trabalho mínimo e a saída abaixo:
\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}
Responder1
Você precisa corrigir o \@startsection
comando; patch \section
também é possível, mas adicionaria um comando de espaçamento também para arquivos \section*
. Não é grande coisa, mas se for possível evitá-lo, melhor.
\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}
Explicação: \@dblarg
é executado somente quando temos \section
sem *
; então, antes do TeX executá-lo, adicionamos \artemis@space@loft
, que adiciona uma anotação de espaço vertical nos arquivos .lof
e .lot
. É o mesmo que a book
classe faz \chapter
(10pt é usado ali, em um artigo um espaço menor parece mais apropriado). Ele usa uma técnica sugerida porJohannes_Bque explora um recurso do Koma-Script; desta forma, também os tipos float recém-definidos receberão o mesmo tratamento.
O parâmetro #2
to \@startsection
é o nível da seção, então verificamos se é igual a \sectionnumdepth
. Pois article
deve-se usar \@ne
em vez de \sectionnumdepth
no corpo de \artemis@space@loft
.
Adicionei \subsection
para verificar se o espaçamento é adicionado apenas para seções (e é).
Atualização importante para KoMaScript versão 3.14
Quando a versão 3.14 recém-lançada das classes e pacotes KoMaScript foi instalada, o patch acima não funciona mais.
Para esta versão é necessário alterar
\patchcmd{\@startsection}
{\@dblarg}
{\artemis@space@loft{#2}\@dblarg}
{}{}
em
\patchcmd{\scr@startsection}
{\scr@section@dblarg}
{\artemis@space@loft{#2}\scr@section@dblarg}
{}{}
Obrigado a Johannes_B por ter notado isso tão cedo (a nova versão foi carregada no TeX Live em 8 de dezembro de 2014).
Se ambos os patches forem necessários para um trabalho cooperativo quando uma das partes ainda não atualizou o KoMaScript, então
\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]{%
...
deveria fazer.