[Tex/LaTex] Centering figures vertically on a page

floatsvertical alignment

I am finishing off a book, and there are a few issues with some page layouts. Specifically, the publishers have requested figures to be on the top and bottom of pages as much as possible. I have managed this by using

\makeatletter
\setlength\@fptop{0pt} 
\setlength\@fpsep{8pt plus 1fil} 
\setlength\@fpbot{0pt}
\makeatother

in the preamble, and also with \begin{figure}[b!] and \begin{figure}[t!] sometimes.

However, this means that some figures are too close to the top and bottom of the pages – but this can be fixed by changing the \@fptop and \@fpbot settings.

Another issue which I can't solve, is that some pages have two figures – one at the top, the other at the bottom, with no text between them. I guess the LaTeX parameters decided that there was no room for text. The publishers require that the figures be moved: the top one further down, the bottom one further up, thus centering them better on the page, and removing the vertical space between them.

That is, from this:

 ----------------             
|    -------     |
|   |       |    |
|   |       |    |
|    -------     |
|                |
|                |
|                |
|                |
|                |
|    -------     |
|   |       |    |
|   |       |    |
|    -------     |
 ----------------

to this:

 ----------------
|                |
|                |
|    -------     |
|   |       |    | 
|   |       |    | 
|    -------     |
|                | 
|    -------     |
|   |       |    | 
|   |       |    | 
|    -------     |
|                | 
|                | 
 ----------------

Is there some parameter I can tweak, or package I can use, to satisfy this requirement?

Best Answer

If I understand your posting correctly, there are three separate formatting issues in play:

  • On pages that contain floats and text, the floats must be at top or bottom of the page.

  • On floats-only pages,

    • if there are two or more floats, they must be "centered" on the page, i.e., the spaces above, between, and below the floats must be equal; and
    • if there's a single float, the float must be placed at the top of the page rather than, say, placed centered on the page.

To achieve the first formatting objective, you should use the positioning specifiers [t!] and [b!], as appropriate, with \begin{figure} and \begin{table}. Note that because the parameters \@fptop, \@fpsep, and \@fpbot apply to floats-only pages, their settings are irrelevant if a page contains both text and floats.

Turning to the second and third formatting objectives, let us start by recalling that the "main" LaTeX document classes (viz., article, book, and report) provide the following settings for \@fptop, \@fpsep, and \@fpbot, respectively:

\setlength{\@fptop}{0pt plus 1fil}
\setlength{\@fpsep}{8pt plus 2fil}
\setlength{\@fpbot}{0pt plus 1fil}

To achieve the second formatting objective, it suffices to issue the commands

\makeatletter
\setlength{\@fpsep}{0pt plus 1fil}
\makeatother

in the preamble.

In my view, the second and third formatting objectives are in conflict with each other. If a float is big enough to warrant being placed on a page all by itself, it would look better if it were centered vertically, with equal amounts of whitespace above and below, rather than set at the top, with lots of whitespace below it. Is there anything you can do to convince the publisher to modify the third objective? OTOH, if placing the single float at the very top really is what the publisher wants, it doesn't seem right to switch to an entirely different system for floats-only pages with two (or more) floats?