在以下 MWE 中,我想规则(浮标上方和下方的灰线)两种环境(listings
和algorithmicx
,分别是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}