算法环境中字幕高度不一致

算法环境中字幕高度不一致

我注意到环境标题的高度algorithm不仅取决于字体大小,还取决于实际的标题文本:

\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}

当您从标题中删除时(Ü),高度/对齐方式会发生变化:

标题对齐

如何才能实现不依赖于实际字形的一致高度和对齐?类似的东西\protect\vphantom{Ü}似乎可以解决这个问题,但肯定有一些更优雅和通用的方法。

答案1

algorithms.sty加载float.sty以定义algorithm环境。 caption.sty支持自定义用 定义的字幕float.sty。您可以使用strut提供的键caption.sty来在字幕内保持一致的高度。下面的代码无需algorithms.sty展示幕后发生的事情:

\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}

在此处输入图片描述

相关内容