In LaTeX, when using book
or report
class, there may be extra space in LoF (List of Figures) and LoT (List of Tables) that doesn’t go away no matter how hard you try. The extra space is probably caused by the use of \chapter
. For example, consider the following dummy code:
\documentclass[12pt]{report} \usepackage{graphicx, titlesec, setspace, hyperref} \singlespacing \titlespacing{\chapter}{0pt}{0pt}{0pt} \titleformat{\chapter}[hang]{\filcenter}{Chapter\ \thechapter}{0.5in}{}[] \newcommand{\addfig}{\begin{figure}[h]\includegraphics{test.png}\caption{Test}\end{figure}} \begin{document} \listoffigures \chapter{Chapter 1}\addfig\addfig \chapter{Chapter 2}\addfig\addfig \end{document}
The generated PDF (using pdflatex
) contains the following list of figures:
See the extra space between List of Figures
and the entry 1.1
and also between the extry of 1.2
and 2.1
?
Before you found this page, you probably already found some solutions that patch the command \@chapter
. For example, the best answer to this StackExchange question: https://tex.stackexchange.com/a/121881
The explanations from those solutions are basically correct: the extra space is caused by that \chapter
calls an internal command \@chapter
, which adds the extra space to LoF through \addtocontents{lof}{\protect\addvspace{10\p@}}
. Assuming your TeX file is called main.tex
, then in the generated LoF file, main.lof
, you can see \addvspace{10\p@}
above the first entry of each chapter.
However, the solution to patch \@chapter
does not work in many situations, for example, in the dummy TeX code we had above. Why?
In our dummy code, the solution patching \@chapter
doesn’t work because \@chapter
is overwritten by the package hyperref
. So the internal command that puts \addvspace{10\p@}
in LoF is not \@chapter
anymore. After loading hyperref
, the command responsible for adding the extra space is now \Hy@org@chapter
. That’s the one we should patch. We can patch the command by adding the following code to the preamble:
\usepackage{etoolbox} \makeatletter \patchcmd{\Hy@org@chapter}{\addtocontents{lof}{\protect\addvspace{10\p@}}}{}{}{} \makeatother
Now, the generated LoF should look like
Conclusion
The hyperref
package is the commonly seen cause that renders the patching of \@chapter
failed. Sometimes even if you don’t use hyperref
explicitly, some of your loaded packages actually load hyperref
silently. And that’s why patching \@chapter
doesn’t work even when you’re not using hyperref
. In such a case, instead, patch the command \Hy@org@chapter
.
Be First to Comment