算法包中 \state 中的自定义计数器

算法包中 \state 中的自定义计数器

我正在使用算法包。每次我输入 \state 时,它​​都会生成一个新的枚举行。

我想要做的是,在 x 行之后更改计数器,以便下一行是 $t$。

这是一个 MWE(使用类似 \setcounter{state}{t} 的东西不起作用):

\documentclass[authoryear,a4paper, 12pt]{elsarticle}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{graphicx,amsmath} 
\usepackage{enumitem}
\usepackage{algorithm,algorithmic}
\begin{document}

begin{algorithm}
        \caption{
            \label{alg:leftmost-leaves}
            Leftmost-leaves algorithm for an all-good cake.
        }
        \begin{algorithmic}[1]
            \REQUIRE{A cake.}
            \ENSURE{A phrase.}
            \STATE  In period $1$,
            
            \STATE  In period 2

            \STATE In period t,
            Similarly
        \end{algorithmic}
    \end{algorithm}
    \end{document}

答案1

打印行号的宏称为\ALC@lno。您可以临时重新定义它以打印所需的字符串。

之后若要撤消效果,可以将原始定义存储到另一个宏中,然后将该定义复制回来。定义可以在以下位置找到algorithmic.sty

\newcommand{\ALC@lno}{%
\ifthenelse{\equal{\arabic{ALC@rem}}{0}}
{{\ALC@linenosize \arabic{ALC@line}\ALC@linenodelimiter}}{}%
}

打印行号的部分由三部分组成:行号大小、计数器和分隔符(默认为:)。对于重新定义,我们可以将其更改为:

\ALC@linenosize $t$\ALC@linenodelimiter

这个重新定义应该放在计数器改变的行之前,并且在那行的末尾可以恢复原始定义。

因为宏名称\ALC@lno包含@符号,所以您需要用 和 括住使用该名称的任何\makeatletter代码\makeatother

梅威瑟:

\documentclass[authoryear,a4paper, 12pt]{elsarticle}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{graphicx,amsmath} 
\usepackage{enumitem}
\usepackage{algorithm,algorithmic}
\begin{document}

% store the original definition from algorithmic.sty
\makeatletter
\newcommand\origalclno{%
\ifthenelse{\equal{\arabic{ALC@rem}}{0}}
{{\ALC@linenosize \arabic{ALC@line}\ALC@linenodelimiter}}{}%
}
\makeatother

\begin{algorithm}
        \caption{
            \label{alg:leftmost-leaves}
            Leftmost-leaves algorithm for an all-good cake.
        }
        \begin{algorithmic}[1]
            \REQUIRE{A cake.}
            \ENSURE{A phrase.}
            \STATE  In period $1$,
            
            \STATE  In period 2\makeatletter\renewcommand\ALC@lno{\ALC@linenosize $t$\ALC@linenodelimiter}\makeatother

            \STATE In period t,\makeatletter\let\ALC@lno\origalclno\makeatother
            
            \STATE In period 4
        \end{algorithmic}
    \end{algorithm}
    \end{document}

结果:

在此处输入图片描述

请注意,行计数器会正常增加,因此下一行是 4。

相关内容