69

I have a figure in my paper (I am using IEEEtran package). After this figure there exists a space between the figure and the text. How can I reduce the size of this white space. To be specific the space is between the caption of the figure and the text of my paper. Any suggestions?

5 Answers 5

67

This depends on the location of the float - if the float is at the top of the page, the gap between the caption and the text is \textfloatsep, while the gap for a float in the middle of the page is given by \intextsep.

From the layouts package documentation it is possible to see the lengths in terms of page/document float elements (p 21 onward):

enter image description here

Default for ieeetran are

  • \textfloatsep: 1.7\baselineskip plus 0.2\baselineskip minus 0.5\baselineskip
  • \intextsep: \baselineskip plus 0.2\baselineskip minus 0.2\baselineskip

and therefore depends on the choice of the default font (since that sets \baselineskip). The default pt-form is therefore

  • \textfloatsep: 20.4pt plus 2.4pt minus 4.8pt
  • \intextsep: 12.0pt plus 2.4pt minus 2.4pt

in the 10pt font size. The above includes some stretch/shrink. You can modify them using \setlength. For example,

\setlength{\textfloatsep}{\baselineskip plus 0.2\baselineskip minus 0.2\baselineskip}

would allow for between (roughly) 10pt and 15pt gap between the float and the text. Something like

\setlength{\textfloatsep}{5pt}

would fix the distance to 5pt (without stretch/shrink).

13
  • I'm having a huge space between the end of a paragraph and the beginning of the next one, I don't know the reason, I'm using IEEE trans template
    – Tak
    Commented Jul 30, 2013 at 3:42
  • @user1460166: What do you have around these paragraphs? What float specifiers do you use for any floats around it?
    – Werner
    Commented Jul 30, 2013 at 3:52
  • I have a float after the end of the paragraph \begin{figure}[t] \begin{figure}[t] \centering { \begin{tikzpicture}[remember picture] \node[mynode] (image2) {\includegraphics[width=\linewidth]{avghist}}; \end{tikzpicture}} \begin{tikzpicture}[remember picture,overlay] \end{tikzpicture} \caption{} \label{} \end{figure} \begin{figure*}[pht] {\includegraphics[width=\linewidth]{squash3}}\caption{AA} \label{} \end{figure*} \begin{table*}[pht] \begin{tabularx}{\linewidth}{@{}>{\hsize=0.8\hsize}X 2{>{\hsize=1.1\hsize}X}@{}} \toprule \bottomrule \end{tabularx} \caption{AAA} \label{} \end{table}
    – Tak
    Commented Jul 30, 2013 at 3:58
  • @user1460166: Do you really have 2 figures (nested)? It's difficult to gauge what else might be the problem.
    – Werner
    Commented Jul 30, 2013 at 4:16
  • I have two figures then a table
    – Tak
    Commented Jul 30, 2013 at 4:20
31

If you do not want to modify the standard template and just want a quick fix for this, you may add the following command to your document preamble:

\newcommand{\squeezeup}{\vspace{-2.5mm}}

Then, you can use the command \squeezeup throughout your document for reducing the free space after/before figures, formulas, etc., as needed.

21

Werner's answer is obviously a good one. However, I encountered a gotcha.

Using a setting like he suggested:

\setlength{\textfloatsep}{\baselineskip plus 0.2\baselineskip minus 0.5\baselineskip}

produced a cryptic error:

Package calc Error: 'p' invalid at this point...0.2\baselineskip minus 0.5\baselineskip}

After some playing around, I found out that it stumbles over the plus ... minus construction in combination with the \baseline command. What works is to multiply the lone \baseline by 1:

\setlength{\textfloatsep}{1\baselineskip plus 0.2\baselineskip minus 0.5\baselineskip}

Using lengths like 5pt instead of the baseline command is unproblematic.

1
  • Got me an extra paragraph or two in my paper :-)
    – tallharish
    Commented Jul 11, 2018 at 15:53
8

You can use etoolbox package. Just set a \vskip with a negative value at the start (\BeforeBeginEnvironment or \AtBeginEnvironment) and at the end (\AfterEndEnvironment) of the environment figure.

MWE:

\documentclass{IEEEtran}

\usepackage{lipsum}

\usepackage{etoolbox}

\BeforeBeginEnvironment{figure}{\vskip-2ex}
\AfterEndEnvironment{figure}{\vskip-1ex}

\begin{document}

  \lipsum[1]

  \begin{figure}[h]
    \includegraphics{your_figure}
    \caption{text}
  \end{figure}

  \lipsum[1]

\end{document}
1
  • 1
    If the float, well, floats to another place, the \vskips stay at the point of figure's declaration. See here.
    – ScumCoder
    Commented May 28, 2019 at 18:09
1

Try this code, you can use \vspace{-10mm} in the figure code:

\begin{figure} 
    \centering
    \subfloat[\label{fig_2a}]{%
        \includegraphics[width=0.45\linewidth]{Figures/Coss.eps}}
    \hfill
    \subfloat[\label{fig_2b}]{%
        \includegraphics[width=0.45\linewidth]{Figures/Energy.pdf}}
    \\
    \caption{Nonlinear output capacitance characteristics of the MOSFETs  } \label{fig_2}
    \vspace{-10mm}%Put here to reduce too much white space after your table 
\end{figure}
1
  • It worked like a charm! Commented Jul 28, 2023 at 16:17

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .