我正在使用 algorithm 和 algpseudocode 包。当我定义一个算法时,它以一条水平线结束。我想在这条水平线下方放一些文字来解释一些特殊情况。我在各种书籍中都看到过这种用法。我如何将文字放在这条水平线下方?
答案1
\algcomment
我已经定义了一个在环境之后立即使用的新命令algorithm
。
\newcommand{\algcomment}[1]{%
\vspace{-\baselineskip}%
\noindent%
{\footnotesize #1\par}%
\vspace{\baselineskip}%
}
唯一的限制是您不能允许其algorithm
浮动。
梅威瑟:
\documentclass{article}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{lipsum} % just for the example
\newcommand{\algcomment}[1]{%
\vspace{-\baselineskip}%
\noindent%
{\footnotesize #1\par}%
\vspace{\baselineskip}%
}
\begin{document}
\lipsum[1-2]
\begin{algorithm}[H]
\begin{algorithmic}[1]
\For{$x<10$}
\State $x\gets x+1$
\EndFor
\end{algorithmic}
\caption{My algorithm}
\end{algorithm}
\algcomment{This algorithm talks about}
\lipsum[1-2]
\end{document}
输出:
答案2
这是另一种选择,消除了卡尔·科勒答案(如果需要,环境可以自由浮动,并且可以在环境内使用 \algcomment algorithm
):
\documentclass{article}s
\usepackage{etoolbox}
\usepackage{algorithm}
\usepackage{algpseudocode}
\usepackage{lipsum} % just for the example
\makeatletter
\AfterEndEnvironment{algorithm}{\let\@algcomment\relax}
\AtEndEnvironment{algorithm}{\kern2pt\hrule\relax\vskip3pt\@algcomment}
\let\@algcomment\relax
\newcommand\algcomment[1]{\def\@algcomment{\footnotesize#1}}
\renewcommand\fs@ruled{\def\@fs@cfont{\bfseries}\let\@fs@capt\floatc@ruled
\def\@fs@pre{\hrule height.8pt depth0pt \kern2pt}%
\def\@fs@post{}%
\def\@fs@mid{\kern2pt\hrule\kern2pt}%
\let\@fs@iftopcapt\iftrue}
\makeatother
\begin{document}
Some test text.
\begin{algorithm}
\algcomment{This algorithm talks about a really special procedure which will be described elsewhere in this document}
\begin{algorithmic}[1]
\For{$x<10$}
\State $x\gets x+1$
\EndFor
\end{algorithmic}
\caption{My algorithm}
\end{algorithm}
\lipsum[4]
\end{document}