# Inconsistent caption height in algorithm environment

I noticed that the height of the caption of the algorithm environment does not solely depend on the font size, but on the actual caption text as well:

\documentclass{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[no-math]{fontspec}
\usepackage{lmodern}
\usepackage{amsmath}
\usepackage{microtype}

\usepackage{algorithm}
\usepackage{algpseudocode}

\begin{document}

\begin{algorithm}
\caption{Euclid's algorithm (Ü)}
\label{euclid}
\begin{algorithmic}[1]
\Procedure{Euclid}{$a,b$}
\State $r\gets a\bmod b$
\While{$r\not=0$}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile
\State \textbf{return} $b$
\EndProcedure
\end{algorithmic}
\end{algorithm}

\end{document}


When you remove the (Ü) from the caption, the height/alignment changes:

How can I achieve a consistent height and alignment that does not depend on the actual glyphs? Something like \protect\vphantom{Ü} seems to fix it in this case, but surely there is some more elegant and generic approach.

• Is this really an issue? Unless you're using beamer overlays where the jumping would be annoying I doubt somebody will use a ruler and measure the distance of those two caption rules
– user31729
Jan 3 '16 at 0:02
• @ChristianHupfer Fair enough, but even if you ignore the (Ü) in my animated image for a second, I think the overall spacing looks far more balanced in this "extended" version. I think that's because the mean line is centered between the two caption rules. Jan 3 '16 at 9:06

algorithms.sty loads float.sty to define the algorithm environment. caption.sty supports customizing of captions defined with float.sty. You can use the strut key provided by caption.sty for a consistent height within captions. Code below is without algorithms.sty to show what happens behind the scenes:

\documentclass{article}

\usepackage{float}
\floatstyle{ruled}
\floatname{algorithm}{Algorithm}
\newfloat{algorithm}{htbp}{loa}

\usepackage{caption}
\captionsetup[ruled]{strut=on}

\begin{document}

\begin{algorithm}
\captionsetup{strut=off}
\caption{Euclid's algorithm}
\begin{verbatim}
\Procedure{Euclid}{$a,b$}
\State $r\gets a\bmod b$
\While{$r\not=0$}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile
\State \textbf{return} $b$
\EndProcedure
\end{verbatim}
\end{algorithm}

\begin{algorithm}
\caption{Euclid's algorithm}
\begin{verbatim}
\Procedure{Euclid}{$a,b$}
\State $r\gets a\bmod b$
\While{$r\not=0$}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile
\State \textbf{return} $b$
\EndProcedure
\end{verbatim}
\end{algorithm}

\end{document}