88

I have a table written like this:

\begin{table}
    \centering
    \begin{tabular}{|l||c|c|}
    \hline&Column 1&Column 2\
        \hline\hline
    cell1 & cell2 & cell3 \\
    \hline
    cell1 & cell2 & cell3 \\\hline  
    \end{tabular}
    \caption{A test caption}
    \label{tab:attempt1}
\end{table}

Now the caption is VERY NEAR the table.. Additionally, there's a big vertical white space after the caption... How can I fix that to look like any normal table with a caption?

This is the case only with tables, figures are working fine.

The caption is very close to the table, and the following text is so far underneath

9
  • 15
    how about \usepackage{caption} \captionsetup[table]{skip=10pt}?
    – cmhughes
    Jun 5, 2012 at 18:26
  • 2
    It appears that you must have some code or package that affects this that you are not showing. Please always supply a complete document that shows the problem. article class puts a skip of size \abovecaptionskip above the caption, and sets this length to 10pt, so you should get at least that spacing. But you may be using a different class. Jun 5, 2012 at 18:29
  • 2
    This behavior is standard for a KOMA clas because a table gets the caption above instead of below. Of course you can change it via option. Jun 5, 2012 at 18:34
  • 2
    in the ams document classes, it is expected that captions for tables will be placed above the table, and for figures, below the figure, and space is inserted accordingly. if the captions are placed in the "opposite" position (below tables or above figures), no intervening space is provided. so identifying the document class you are using is essential. Jun 5, 2012 at 18:42
  • 3
    @cmhughes You should turn your comment into an answer. Also the following link might be useful to add to the answer: Why should a table caption be placed above the table?
    – Alan Munn
    Jun 5, 2012 at 18:42

7 Answers 7

100

You could try

\usepackage{caption} 
\captionsetup[table]{skip=10pt}

in your preamble. On another note, have a look at Why should a table caption be placed above the table?

2
  • If you have an existing import of caption, note that this works only without tableposition=top.
    – aviator
    Dec 18, 2020 at 16:26
  • This doesn't appear to affect listing captions from minted
    – user32882
    Jul 18, 2022 at 15:33
45

My attention was drawn to this question by another one that had been posted on TeX-LaTeX Meta. In spite of having been asked almost six years ago, not only—IMHO, of course!—is this question still attracting poor answers, it also lacks a satisfactory answer among all those that have been posted so far, including the previous version of this one. This claim might sound as harsh criticism and obviously needs adequate justification, which I’ll try to provide below; but I want to make it clear at the outset that, since the spacing around captions can depend on many interrelated factors (the choice of the document class, in the first place), a comprehensive analysis of the problem would lead us too far. In this answer, I’ve chosen to concentrate on how the caption package can help to control that spacing, also overriding, if necessary, the decisions made by the document class.

As I said, this answer is an extensive modification of a previous, clearly unsatisfactory version, which corresponded, more or less, to what is now the section covering the use of the caption package with the article class.


Spacing Around Captions: The Rôle of the Document Class

As David Carlisle remarked a few minutes after the question was posted, the behavior described therein is not what the standard classes (article, report, books) do; shortly after, Barbara Beeton added that the AMS classes (amsart, amsbook, amsproc) do produce a similar output when the caption of a table is placed below the table itself, since they assume that only in figures the caption occurs at the bottom, while in tables (and in all other other types of floating objects) it is placed at the top. (See, for instance, amsart.cls, lines 1401–1408.) Other document classes make a similar assumption, so you will incur in a similar problem, when using those classes, if you insist on captioning tables at the bottom, as the standard classes expect you to do. The llncs class is one of them (see llncs.cls, l. 789–799 and l. 811–820). We choose to demonstrate only the behavior of amsart and of article.

The “native” behavior of the amsart class

The following source

\documentclass[a4paper]{amsart}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
\usepackage{booktabs}
\usepackage{mwe}



\begin{document}

In figure~\ref{fig:sample} the caption is below
and in table~\ref{tab:sample} it is above:
with the \textsf{amsart} class, they both look right.

\begin{figure}[tbp]
  \centering
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
\end{figure}

\begin{table}[tbp]
  \centering
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
\end{table}

Table~\ref{tab:inverted} has the caption below:
with the \textsf{amsart} class, the spacing is wrong.

\begin{table}[tbp]
  \centering
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

yields the following output:

<code>amsart</code> class, “native” behavior

When the caption is below the table, the spacing is wrong. This is similar to the OP’s case.

The “native” behavior of the article class

Source code:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
\usepackage{booktabs}
\usepackage{mwe}



\begin{document}

In figure~\ref{fig:sample} the caption is below
and in table~\ref{tab:sample} it is above:
with the \textsf{article} class, the former looks right,
but the latter does not.

\begin{figure}[tbp]
  \centering
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
\end{figure}

\begin{table}[tbp]
  \centering
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
\end{table}

On the other hand, table~\ref{tab:inverted}, which has the caption below,
looks right with the \textsf{article} class.

\begin{table}[tbp]
  \centering
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

Output:

<code>article</code> class, “native” behavior

Although even the standard classes allow you to customize, by changing the values of the two style parameters \abovecaptionskip and \belowcaptionskip, the vertical space above and below the captions, they make the unfortunate assumption that all types of caption are placed in the same position (either all above, or all below) with respect to the object they refer to.


Remedies

We already hinted at the fact that several remedies are possible, but that we’ll stick to a few simple ones, based on the caption package. But first, let’s see why I deem the already existing answers unsatisfactory.

Drawbacks of the other answers

The accepted answer (which has got, as of this writing, 44 votes!) is simply wrong, in general, as you can readily verify, for example in the case of the amsart class, if you apply it to the sample source code given above:

\documentclass[a4paper]{amsart}
%\documentclass[a4paper]{llncs}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
\usepackage{caption}
\usepackage{booktabs}
\usepackage{mwe}

\captionsetup[table]{skip=10pt plus 0.01pt}
%\captionsetup{tableposition=above}

\makeatletter

%\renewenvironment{table}
%  {\@float{table}}
%  {\end@float}
%\renewenvironment{table*}
%  {\@dblfloat{table}}
%  {\end@dblfloat}

\newcommand*\DrawHoriLine{%
  \par
  \dimen@ \prevdepth
  \kern -.1\p@
  \hrule \@height .1\p@ \@depth .1\p@
  \kern -.1\p@
  \prevdepth \z@
  \null
  \vskip -\baselineskip
  \prevdepth \dimen@
}

\newcommand*\PrintSkips[1]{%
  \typeout{In #1:}%
  \typeout{\@spaces above: \the\abovecaptionskip}%
  \typeout{\@spaces below: \the\belowcaptionskip}%
}

\makeatother



\begin{document}

In figure~\ref{fig:sample} the caption is below
and in table~\ref{tab:sample} it is above:
with the \textsf{amsart} class, they both look right.

\begin{figure}[tbp]
  \DrawHoriLine
  \centering
  \PrintSkips{figure}
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
  \DrawHoriLine
\end{figure}

\begin{table}[tbp]
  \DrawHoriLine
  \centering
  \PrintSkips{table}
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \DrawHoriLine
\end{table}

Table~\ref{tab:inverted} has the caption below:
with the \textsf{amsart} class, even if we apply @cmhughes' answer,
the spacing is wrong.

\begin{table}[tbp]
  \DrawHoriLine
  \centering
  \PrintSkips{inverted table}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
  \DrawHoriLine
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

This code issues some diagnostic messages that helps you verify the claims we are going to make; for the same reason, it also draws thin horizontal lines that mark the exact boundaries of the floats, to make unwanted vertical spaces between the caption and the edges of the float clearly visible. Note that we have made the vertical space introduced by the solution clearly recognizable in diagnostic messages by adding to it a bit of stretchability. Moreover, you can try by yourself different alternatives (e.g., try the efficacy of the solution with the llncs class) by suitably uncommenting certain lines of code (while commenting out other ones).

It is evident that the accepted answer does not work with the amsart class; it might nonetheless give the impression of being adequate in the case of the llncs class, but it isn’t either; indeed:

  • it introduces spurious spaces between the caption and the edge of the float;

  • in spite of what the caption package claims in a warning issued during the compilation, the look of the captions is changed and differs from that specified by the document class.

Note that the second point does not apply to the amsart class (because it is one of the classes the package is aware of). With the llncs class, however, the fact that the look of captions is not preserved can be a problem, and one might prefer, for this reason, to avoid the caption package altogether. Actually, in this case the simplest thing to do, if one insists on captioning tables “from below”, is probably to restore the original definition of the two environments table and table*, as given in the article class (on which llncs is based). This is achieved uncommenting the lines

%\renewenvironment{table}
%  {\@float{table}}
%  {\end@float}
%\renewenvironment{table*}
%  {\@dblfloat{table}}
%  {\end@dblfloat}

in the code shown above. Since I’m struggling (once more!) with the 30000 character limit, I’ll leave to you to check that what I’ve just said is true, as well as to try other possible alternatives, by suitably commenting/uncommenting parts of that code. After all, the llncs class is not a part of the standard distributions, and I want this answer to focus on solutions that work with the standard classes. Let me draw attention, however, to an additional drawback of the accepted answer: it sets the skip between the caption and the table to a value that ignores the setting made by the document class. For example, the amsart class uses 12pt, not 10pt.

I find @isk27’s answer and @agold’s defective in similar ways: besides suggesting a patch that needs to be applied to each float individually, they ignore the style parameters preset by the class. The center environment, in particular, yields too much space.

Using the caption package

Actually, simply loading the caption package should solve the issue: see section 2.6 of its manual, beginning on page 13. Note that the command

\captionsetup[table]{skip=10pt}

specifies the value of the skip between the caption and the captioned object, and should be used only if you want to alter the value preset by the document class, which, as already remarked, is not always a good idea. One should say, rather,

\captionsetup[table]{position=above}

but this is not needed in simple circumstances, because the default setting position=auto is usually capable of guessing automatically where the captions occurs (above or below the floating object). Should this fail, besides the declaration shown above, you can also use the following shortcut, which also works, when you load the package:

\usepackage[tableposition=above]{caption}

See section 5 of the manual of the caption package for information on how the package interacts with some known document classes. Complete, compilable examples, which illustrate its behavior with the article and the amsart classes, and also show how you can override the general settings for a particular table, follow in the next sections.

The strategy that the caption table uses to adjust the vertical space around captions sometimes swaps the meaning of the style parameters \abovecaptionskip and \belowcaptionskip; all the examples in the next sections print the values of those parameters, to help you understand what the package is doing.


article Document Class

Recall that, with article, you need to change the default behavior if you want to caption tables “from above”.

article + caption, default settings

In this case, usually, the caption package is smart enough to insert the correct spaces in all cases, even if you include an exceptional table that is captioned differently from the others; however, this is not guaranteed to work in all situations.

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
%
% The following should generally suffice...
\usepackage{caption}
%
% ... but if it doesn't, use, for example, the "tableposition" option:
% \usepackage[tableposition=above]{caption}
%
% Other packages follow:
\usepackage{booktabs}
\usepackage{mwe}

\makeatletter

\newcommand*\PrintSkips[1]{%
  \typeout{In #1:}%
  \typeout{\@spaces above: \the\abovecaptionskip}%
  \typeout{\@spaces below: \the\belowcaptionskip}%
}

\makeatother



\begin{document}

Now figure~\ref{fig:sample} (with the caption below)
and table~\ref{tab:sample} (with the caption above)
both look correct.  Remember that we are using the
\textsf{article} class.

\begin{figure}[tbp]
  \centering
  \PrintSkips{figure}
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
\end{figure}

\begin{table}[tbp]
  \centering
  \PrintSkips{table}
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
\end{table}

An exceptional table that, like table~\ref{tab:inverted},
has the caption below, is still handled correctly, if we
we do \emph{not} specify to the \textsf{caption} package
any positioning option for captions (the default
\texttt{position=auto} remains in force).
However, this is not guaranteed to work in all situations.

\begin{table}[tbp]
  \centering
  \PrintSkips{inverted table}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

Output:

<code>article</code> + <code>caption</code>, default settings

article + caption + tableposition=above

If you explicitly specify tableposition=above, however, an exceptional table with the caption below will not be handled correctly.

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
%
% The following should generally suffice...
% \usepackage{caption}
%
% ... but if it doesn't, use, for example, the "tableposition" option:
\usepackage[tableposition=above]{caption}
%
% Other packages follow:
\usepackage{booktabs}
\usepackage{mwe}

\makeatletter

\newcommand*\PrintSkips[1]{%
  \typeout{In #1:}%
  \typeout{\@spaces above: \the\abovecaptionskip}%
  \typeout{\@spaces below: \the\belowcaptionskip}%
}

\makeatother



\begin{document}

Now figure~\ref{fig:sample} (with the caption below)
and table~\ref{tab:sample} (with the caption above)
both look correct.  Remember that we are always using
the \textsf{article} class.

\begin{figure}[tbp]
  \centering
  \PrintSkips{figure}
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
\end{figure}

\begin{table}[tbp]
  \centering
  \PrintSkips{table}
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
\end{table}

If the \textsf{caption} package is explicitly loaded
specifyig \texttt{tableposition=above}, though,
an exceptional table that, like table~\ref{tab:inverted},
has the caption below, will \emph{not} be handled correctly.

\begin{table}[tbp]
  \centering
  \PrintSkips{inverted table}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

Output:

<code>article</code> + <code>caption</code> + <code>tableposition=above</code>

Such an exceptional table can still be coped with by means of a \captionsetup command issued in the body of the floating environment.

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
%
% The following should generally suffice...
% \usepackage{caption}
%
% ... but if it doesn't, use, for example, the "tableposition" option:
\usepackage[tableposition=above]{caption}
%
% Other packages follow:
\usepackage{booktabs}
\usepackage{mwe}

\makeatletter

\newcommand*\PrintSkips[1]{%
  \typeout{In #1:}%
  \typeout{\@spaces above: \the\abovecaptionskip}%
  \typeout{\@spaces below: \the\belowcaptionskip}%
}

\makeatother



\begin{document}

Now figure~\ref{fig:sample} (with the caption below)
and table~\ref{tab:sample} (with the caption above)
both look correct.  We are always using the \textsf{article} class.

\begin{figure}[tbp]
  \centering
  \PrintSkips{figure}
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
\end{figure}

\begin{table}[tbp]
  \centering
  \PrintSkips{table}
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
\end{table}

Even when \texttt{tableposition=above} has been specified,
an exceptional table that, like table~\ref{tab:inverted},
has the caption below, can still be dealt with by means
of a \verb|\captionsetup| command issued in the body of
the floating environment.  This is guaranteed to work.

\begin{table}[tbp]
  \centering
  \captionsetup{position=below}
  \PrintSkips{inverted table}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

Output:

<code>article</code> + <code>caption</code> + <code>tableposition=above</code>, with exception


amsart Document Class

Recall that, with amsart, you need to change the default behavior if you want to caption tables “from below”.

amsart + caption, default settings

With amsart, the default setting imply that all floats except figures (in particular, all tables) should be captioned above. Unfortunately, with amsart the caption package does not handle correctly an exceptional table that is captioned the other way round.

\documentclass[a4paper]{amsart}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
%
% The following should generally suffice...
\usepackage{caption}
%
% ... but if it doesn't, use, for example, the "tableposition" option:
% \usepackage[tableposition=above]{caption}
%
% Other packages follow:
\usepackage{booktabs}
\usepackage{mwe}

\makeatletter

\newcommand*\PrintSkips[1]{%
  \typeout{In #1:}%
  \typeout{\@spaces above: \the\abovecaptionskip}%
  \typeout{\@spaces below: \the\belowcaptionskip}%
}

\makeatother



\begin{document}

Remember?  With the \textsf{amsart} class,
figure~\ref{fig:sample} (with the caption below)
and table~\ref{tab:sample} (with the caption above)
both looked correct; the same happens if we load the
\textsf{caption} package, as we are doing now.
So, loading the package seems useless in this case,
but it does not harm.

\begin{figure}[tbp]
  \centering
  \PrintSkips{figure}
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
\end{figure}

\begin{table}[tbp]
  \centering
  \PrintSkips{table}
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
\end{table}

Unfortunately, with the \textsf{amsart} class,
an exceptional table that, like table~\ref{tab:inverted},
has the caption below, will \emph{not} be handled correctly,
if we load the \textsf{caption} package without specifying
any positioning option for captions (thereby leaving
the default \texttt{position=auto} in force).

\begin{table}[tbp]
  \centering
  \PrintSkips{inverted table}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

Output:

<code>amsart</code> + <code>caption</code>, default settings

amsart + caption + tableposition=above

This is the same as the case of the previous subsection. Of course, you can still cope with an exceptional table with the caption below by means of a \captionsetup command issued in the body of the floating environment.

\documentclass[a4paper]{amsart}
\usepackage[T1]{fontenc} % I’m accustomed to always loading it...
%
% The following should generally suffice...
% \usepackage{caption}
%
% ... but if it doesn't, use, for example, the "tableposition" option:
\usepackage[tableposition=above]{caption}
%
% Other packages follow:
\usepackage{booktabs}
\usepackage{mwe}

\makeatletter

\newcommand*\PrintSkips[1]{%
  \typeout{In #1:}%
  \typeout{\@spaces above: \the\abovecaptionskip}%
  \typeout{\@spaces below: \the\belowcaptionskip}%
}

\makeatother



\begin{document}

Remember?  With the \textsf{amsart} class,
figure~\ref{fig:sample} (with the caption below)
and table~\ref{tab:sample} (with the caption above)
both looked correct; the same happens if we load the
\textsf{caption} package, as we are doing now.
So, loading the package seems useless in this case,
but it does not harm.

\begin{figure}[tbp]
  \centering
  \PrintSkips{figure}
  \includegraphics[scale=0.5]{image}
  \caption{A sample image}
  \label{fig:sample}
\end{figure}

\begin{table}[tbp]
  \centering
  \PrintSkips{table}
  \caption{A sample table}
  \label{tab:sample}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
\end{table}

However, the \textsf{caption} package is still useful in that
an exceptional table that, like table~\ref{tab:inverted},
has the caption below, can correctly be dealt with,
even when the package is loaded with \texttt{tableposition=above},
by means of a \verb|\captionsetup| command issued in the body
of the floating environment.

\begin{table}[tbp]
  \centering
  \captionsetup{position=below}
  \PrintSkips{inverted table}
  \begin{tabular}{lcc}
    \toprule
    Titles & Data 1 & Data 2  \\
    \midrule
    This is the first row & 12 & 34  \\
    This is the second row & 56 & 78  \\
    This is---guess what?---the third row & 90 & ?? \\
    \bottomrule
  \end{tabular}
  \caption{A table with a caption below}
  \label{tab:inverted}
\end{table}

Random text follows, just to fill the page up.

\lipsum[1-2]

\end{document}

Output:

<code>amsart</code> + <code>caption</code> + <code>tableposition=above</code>, with exception

Note that the same workaround should be applied also if the caption package is loaded with default setting (try it).

1
  • 1
    This is very comprehensive and convincing, but I think it would be extremely helpful to have a "TL;DR: Do this" at the top. In my case, I was using amsart and wanted \usepackage[tableposition=below]{caption} Oct 31, 2022 at 13:49
11

Try this before caption:

    \bigskip
5
  • 2
    Thank you, this is the best answer because it is simple and actually works. Tip: use \medskip for a slightly smaller spacing.
    – aviator
    Dec 18, 2020 at 16:20
  • 1
    \smallskip is also available Sep 25, 2021 at 23:04
  • Thank you for this brief answer :)
    – Hamzah
    Apr 27, 2022 at 8:18
  • This should be the accepted answer! Genius
    – My Name
    May 5, 2022 at 14:25
  • Such a cute answer. Short and sweet. Thanks so much!
    – aysljc
    May 24, 2022 at 16:53
8

I had the same problem and I have found that using \begin{center} and \end{center} instead of \centering does add more space between the caption and the table:

\begin{table}
    \begin{center}
    \begin{tabular}{|l||c|c|}
    \hline&Column 1&Column 2\\
    \hline\hline
    cell1 & cell2 & cell3 \\\hline
    cell1 & cell2 & cell3 \\\hline  
    \end{tabular}
    \end{center}
    \caption{A test caption 2.}
    \label{tab:attempt2}
\end{table}

This results in:

table using center

However, as commented before, when no special packages/settings are used the normal output already has sufficient space:

\begin{table}
    \centering
    \begin{tabular}{|l||c|c|}
    \hline&Column 1&Column 2\\
    \hline\hline
    cell1 & cell2 & cell3 \\\hline
    cell1 & cell2 & cell3 \\\hline  
    \end{tabular}
    \caption{A test caption.}
    \label{tab:attempt1}
\end{table}

table with centering

3

The easiest solution that worked for me is adding \vspace{...} before the caption. This is how it looks:

image showing the caption 0.1cm further away from the table

\begin{table}[H]
\centering
\begin{tabular}{|l|l|l|r|r|}
  \hline Monopole & No  & \#1 & 5 & 482 106 m \\
  \hline Yagi-Uda & Yes & \#1 & 4 &  86 903 m \\
  \hline Yagi-Uda & Yes & \#2 & 4 & 108 642 m \\
  \hline
\end{tabular}
\vspace{0.1cm}
\caption{Position accuracy of experiment 3}
\label{tab:exp3results}
\end{table}

Thanks to isk27's answer for nudging me in the right direction! I tried adding vspaces in other places but didn't get it to work until I saw that suggestion.

1

People who have the same problem, but use KOMA-Script and it's scrreprt document class and place the caption above the table need to add the option captions=tableheading to the document class options:

\documentclass[...,captions=tableheading]{scrreprt}

This adjusts the formatting of the table title and adds vertical space below it. By default the table title is expected to below the table and therefore no vertical space is added below it. Note that you still need to "manually" put \caption{...} above \begin{tabular}.... The above option only changes the formatting but not the position.

1
  • Excellent - very good to know.
    – donnek
    Apr 20 at 20:27
-1

I suffered from the same problem. Finally, I found the cause was from package subfig, changing setting from \usepackage[caption=false]{subfig} to \usepackage[caption=true]{subfig} can resolve problem.

1
  • Sorry, but I think it is right to downvote, here. As far as I can tell, the subfig package is not an essential part of the problem, although it could interact with it in particular situations. I think that, in order for your answer to be helpful, you should at least explain how and when this interaction occur.
    – GuM
    Apr 8, 2018 at 0:49

You must log in to answer this question.

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