抑制算法中“repeat”和“until”关键字前面的行号

抑制算法中“repeat”和“until”关键字前面的行号

这是我的最小示例:

\documentclass{article}

\usepackage{algorithm}
\usepackage{algorithmic}

\begin{document}

\begin{algorithm}
\caption{Test}
\begin{algorithmic}[1]
    \REQUIRE
    \REPEAT
    \STATE state
    \STATE state
    \STATE state
    \UNTIL condition
\end{algorithmic}
\end{algorithm}

\end{document}

我得到这个结果:

在此处输入图片描述

但我更希望这个结果:

在此处输入图片描述

我怎样才能实现这个目标?

答案1

algorithmic在环境开始时创建所有必要的伪代码宏。因此,仅以“通常”的方式进行修补和/或algorithmic并不那么容易。\REPEAT\UNTIL

以下 MWE 在algorithmic环境启动后插入补丁。补丁使用\item形式的“无步骤” \ALC@it@nostep,而不是默认的\ALC@it

在此处输入图片描述

\documentclass{article}

\usepackage{algorithm,algorithmic}% http://ctan.org/pkg/algorithms
\usepackage{xpatch,letltxmacro}% http://ctan.org/pkg/etoolbox
\makeatletter
\newcommand{\ALC@it@nostep}{\item[]}% No-step algorithmic item
% \patchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\LetLtxMacro\oldalgorithmic\algorithmic
\LetLtxMacro\endoldalgorithmic\endalgorithmic
\renewenvironment{algorithmic}[1][0]{%
  \oldalgorithmic[#1]%
  \xpatchcmd{\REPEAT}{\ALC@it}{\ALC@it@nostep}{}{}%
  \xpatchcmd{\UNTIL}{\ALC@it}{\ALC@it@nostep}{}{}%
}{\endoldalgorithmic}
\makeatother

\begin{document}

\begin{algorithm}
\caption{Test}
\begin{algorithmic}[1]
  \REQUIRE
  \REPEAT
  \STATE state
  \STATE state
  \STATE state
  \UNTIL condition
\end{algorithmic}
\end{algorithm}

\end{document}

相关内容