如何获取 algorithmicx 和 listings 浮点数的一致规则长度?

如何获取 algorithmicx 和 listings 浮点数的一致规则长度?

在以下 MWE 中,我想规则(浮标上方和下方的灰线)两种环境listingsalgorithmicx,分别是algpseudocode风格)具有视觉上(我并不追求完美)相同的缩进相对于行号和文本边距。

就我个人而言,我更喜欢当前的listings设置。因此,除非我无意中违反了某些排版规则(无意双关),否则我希望让浮动algorithmicx符合代码清单。

一张照片说明了一切

在此处输入图片描述

平均能量损失

是的,有点长...

\documentclass{memoir}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{xcolor}
\usepackage{listings}

% algorithm settings
\makeatletter
\newcommand\fs@plainruled{\def\@fs@cfont{\rmfamily}\let\@fs@capt\floatc@plain
  \def\@fs@pre{{\color{gray}\hrule height.8pt depth0pt \kern2pt}}%
  \def\@fs@post{}%
  \def\@fs@mid{{\kern2pt\color{gray}\hrule height.8pt depth0pt\relax\kern\abovecaptionskip}}%
  \let\@fs@iftopcapt\iffalse}
\makeatother
\floatstyle{plainruled}
\restylefloat{algorithm}
\algrenewcommand{\alglinenumber}[1]{\color{gray}\tiny#1}

% listings settings
\lstset{    
    numbers=left,numberstyle=\color{gray}\tiny,numbersep=1em,
    showspaces=false,showtabs=false,showstringspaces=false,
    frame=tb,tabsize=4,rulecolor=\color{gray},
    xleftmargin=1.5em,
    breaklines=true,breakatwhitespace=true
}
\begin{document}
\begin{algorithm}
\caption{K-Means algorithm}
\label{alg:k-means-orig}
\begin{algorithmic}[1]
  \State select $K$ observations randomly as initial cluster centroids
  \Repeat
    \State assign each observation to the closest centroid
    \State recalculate cluster positions
  \Until{cluster centroids do not move anymore}
\end{algorithmic}
\end{algorithm}

\begin{lstlisting}[float,caption={A blind text code listing},label={lst:blind}]
for(k=0; k<N; k++) {
    if(k%2=0) {
        tmp = foo[k];
        foo[k] = foo[k+1];
        foo[k+1] = tmp;
    }
}
\end{lstlisting}
\end{document}

答案1

\vspace{}我使用、\hrulefill和得出了近似值\\。它看起来像我想要的那样,但是神奇的数字(1.55em-7pt-9pt)和负间距的使用\\告诉我我做得非常错误。

结果

算法列表的顶部和底部框架间距与列表代码列表大致相同

变化

%algorithm settings将序言部分替换为:

% algorithm settings
\makeatletter
\newcommand\fs@plainruled{\def\@fs@cfont{\rmfamily}\let\@fs@capt\floatc@plain
  \def\@fs@pre{{\color{gray}\hspace{1.55em}\hrulefill\\[-7pt]}}%
  \def\@fs@post{}%
  \def\@fs@mid{{\vspace{-9pt}\color{gray}\hspace{1.55em}\hrulefill{}\\[-6pt]}}%
  \let\@fs@iftopcapt\iffalse}
\makeatother
\floatstyle{plainruled}
\restylefloat{algorithm}
\algrenewcommand{\alglinenumber}[1]{\color{gray}\tiny#1}

相关内容