# svmono: how center figure vertically?

How can I center a figure vertically within a full page, when using the svmono class? The traditional solutions I found in the forum doensn't seem to work with this class. Please note this is NOT for actual submission to the publisher, but for private use.

Thanks and regards, Jorge.

Example (UPDATED):

\documentclass[graybox,envcountchap,vecarrow,twoside]{svmono}
\usepackage[paperheight=240mm,paperwidth=170mm,top=2.5cm,inner=2.5cm]{geometry}

\usepackage[caption=false,font=footnotesize]{subfig}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{floatrow}

\begin{document}

% Some text
\lipsum[1-5]

% A figure in an new page
\clearpage
\begin{figure}[p]   %doesn't work
%\begin{figure}[H]  %doesn't work
\centering
\sidesubfloat[]{\includegraphics[height=6cm,width=8cm]{example-image-a}}

\vspace{1cm}
\sidesubfloat[]{\includegraphics[height=6cm,width=8cm]{example-image-b}}
\caption{This figure should be centered vertically}
\end{figure}

% Some text in an new page
\clearpage
\lipsum[6-10]

\end{document}


Actual output:

Desired output:

• If you're writing something for Springer, then leave it alone. It might very well be a design choice from Springer. Remember, you are the content provider, not the document designer. Oct 16, 2018 at 13:55
• And that also includes messing with the margins, if this is going to be submitted to Springer, then do not mess with the layout given to you even if you do not like it. It is not up to you. (those at the other end gets quite annoyed when authors start to mess with layouts thye have been given to use). Oct 16, 2018 at 13:57
• Thanks for point that out, daleif. This is actually for private use, not intended to be sent to the publisher of the class. I've updated the question to mention this. Oct 16, 2018 at 14:01
• Then I would use another class, like the standard book, memoir (that's the one we use) or one of the koma classes, don't try to modify something not meant to be modified Oct 16, 2018 at 14:25
• What about \clearpage\null\vfil with \begin{figure}[h]? Oct 16, 2018 at 17:26

Here is a way that doesn't use the figure environment but caption package instead:

\documentclass[graybox,envcountchap,vecarrow,twoside]{article}
\usepackage[paperheight=240mm,paperwidth=170mm,top=2.5cm,inner=2.5cm]{geometry}

\usepackage[caption=false,font=footnotesize]{subfig}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{caption}

%This code makes thhe whole job of vertical centering the image
% #1 includegraphics options
% #2 image name
% #3 image caption
\newsavebox{\mysavebox}
\newlength{\myvspace}
\clearpage
\savebox\mysavebox{\vbox{\phantom{.}\par\includegraphics[#1]{#2}}}%
\setlength\myvspace{\dimexpr(\paperheight-\dimexpr(\ht\mysavebox+\dp\mysavebox))/4\relax}%
\phantom{.}\vspace{\myvspace}\par\usebox\mysavebox\captionof{figure}{#3}\clearpage%
}

\begin{document}

% Some text
\lipsum[1-5]

% A figure in an new page
\addCenteredImage[height=10cm,width=10cm]{example-image-a}{This figure should be centered vertically}

\lipsum[6-10]

\end{document}


It is a way with simple commands as far as I can understand them.

The output is the desired of your image.

Edit for subfigures: (After OP's edit)

\documentclass[graybox,envcountchap,vecarrow,twoside]{article}
\usepackage[paperheight=240mm,paperwidth=170mm,top=2.5cm,inner=2.5cm]{geometry}

\usepackage[caption=false,font=footnotesize]{subfig}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{caption}

%This code makes thhe whole job of vertical centering the image
% #1 includegraphics options
% #2 image name
% #3 image caption
\newsavebox{\mysavebox}
\newlength{\myvspace}
\clearpage
\savebox\mysavebox{\vbox{\phantom{.}\par #1}}%
\setlength\myvspace{\dimexpr(\paperheight-\dimexpr(\ht\mysavebox+\dp\mysavebox))/4\relax}%
\phantom{.}\vspace{\myvspace}\par\usebox\mysavebox\clearpage%
}

\begin{document}

% Some text
\lipsum[1-5]

% A figure in an new page
\centering
\includegraphics[height=3cm,width=8cm]{example-image-a}
\captionof{subfigure}{Test 1}
\vspace{1cm}
\includegraphics[height=3cm,width=8cm]{example-image-b}
\captionof{subfigure}{Test 2}
\captionof{figure}{This figure should be centered vertically}
}

\lipsum[6-10]

\end{document}


Output:

• The code should work in any class that accepts caption package Oct 16, 2018 at 14:48
• Thanks for the solution, koleygr. Unfortunately, this doesn't work for more complex figures (in reality I have many subfloats in my figures). I have updated the MWE to reflect this. Oct 16, 2018 at 15:48
• @dontpanic, just replace in my whole inludegraphics command with #1, the parameters from [3][] to [1] and.delete the captionof command. Then you may use it with your includegrapcics commands and captionof commands in the place of the new command's argument. Wrote from mobile.. any user with edit rights may edit my post to help you Oct 16, 2018 at 16:46
• @dontpanic... I found a wi-fi here and added the comment's solution for your case (still using caption package) Oct 16, 2018 at 17:22

A page float is typeset using

\vspace*{\@fptop}

<material of the float>

\vspace*{\@fpbot}


The svmono class sets \@fptop to zero, leaving \@fpbot to the default value of 0pt plus 1fil.

\documentclass[graybox,envcountchap,vecarrow,twoside]{svmono}
\usepackage[paperheight=240mm,paperwidth=170mm,top=2.5cm,inner=2.5cm]{geometry}

\usepackage[caption=false,font=footnotesize]{subfig}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{floatrow}

\makeatletter
\setlength\@fptop{0pt plus 1fil} % <--- restore the values
\makeatother

\begin{document}

% Some text
\lipsum[1-5]

% A figure in an new page
\clearpage
\begin{figure}[p]   %doesn't work
%\begin{figure}[H]  %doesn't work
\centering
\sidesubfloat[]{\includegraphics[height=6cm,width=8cm]{example-image-a}}

\vspace{1cm}
\sidesubfloat[]{\includegraphics[height=6cm,width=8cm]{example-image-b}}
\caption{This figure should be centered vertically}
\end{figure}

% Some text in an new page
\clearpage
\lipsum[6-10]

\end{document}


Thanks everyone for your kind suggestions. The solution proposed by Sigur does the trick (see below). Regards, Jorge.

\documentclass[graybox,envcountchap,vecarrow,twoside]{svmono}
\usepackage[paperheight=240mm,paperwidth=170mm,top=2.5cm,inner=2.5cm]{geometry}

\usepackage[caption=false,font=footnotesize]{subfig}
\usepackage{graphicx}
\usepackage{lipsum}
\usepackage{floatrow}

\begin{document}

% Some text
\lipsum[1-5]

% A figure in an new page
\clearpage\null\vfil
\begin{figure}[h]
\centering
\sidesubfloat[]{\includegraphics[height=6cm,width=8cm]{example-image-a}}

\vspace{1cm}
\sidesubfloat[]{\includegraphics[height=6cm,width=8cm]{example-image-b}}
\caption{This figure should be centered vertically}
\end{figure}

% Some text in an new page
\clearpage
\lipsum[6-10]

\end{document}


Output: