He encontrado varias publicaciones y preguntas de personas que quiereneliminarel espaciado vertical se agrega automáticamente a la lista de figuras, pero mi problema es (exactamente) el opuesto:
Estoy usando la scrartcl
clase de documento con secciones como separador de nivel más alto. En mi lista de figuras no hay separación entre las figuras de diferentes apartados.
¿Cómo puedo agregar tal separación visual?
Vea el siguiente ejemplo de trabajo mínimo y el resultado a continuación:
\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}
Respuesta1
Necesita parchear el \@startsection
comando; También es posible aplicar parches \section
, pero agregaría un comando de espaciado también para archivos \section*
. No es gran cosa, pero si es posible evitarlo, mejor.
\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}
Explicación: \@dblarg
se ejecuta solo cuando tenemos \section
sin *
; Entonces, antes de que TeX lo ejecute, agregamos \artemis@space@loft
, que agrega una anotación de espacio vertical en los archivos .lof
y .lot
. Esto es lo mismo que book
hace la clase \chapter
(allí se usa 10 puntos, en un artículo un espacio más pequeño parece más apropiado). Utiliza una técnica sugerida porjohannes_bque explota una característica de Koma-Script; de esta manera, también los tipos flotantes recién definidos recibirán el mismo tratamiento.
El parámetro #2
to \@startsection
es el nivel de sección, por lo que verificamos que sea el mismo que \sectionnumdepth
. Porque article
se debe usar \@ne
en lugar de \sectionnumdepth
en el cuerpo de \artemis@space@loft
.
Agregué \subsection
para verificar que el espaciado se agregue solo para las secciones (y así es).
Actualización importante para KoMaScript versión 3.14
Cuando se instala la versión 3.14 recién lanzada de las clases y paquetes de KoMaScript, el parche anterior ya no funciona.
Para esta versión hay que cambiar.
\patchcmd{\@startsection}
{\@dblarg}
{\artemis@space@loft{#2}\@dblarg}
{}{}
en
\patchcmd{\scr@startsection}
{\scr@section@dblarg}
{\artemis@space@loft{#2}\scr@section@dblarg}
{}{}
Gracias a Johannes_B por haberlo notado tan temprano (la nueva versión se subió a TeX Live el 8 de diciembre de 2014).
Si ambos parches son necesarios para un trabajo cooperativo cuando una de las partes aún no ha actualizado KoMaScript, entonces
\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]{%
...
debería hacer.