![算法包中 \state 中的自定义计数器](https://linux22.com/image/437038/%E7%AE%97%E6%B3%95%E5%8C%85%E4%B8%AD%20%5Cstate%20%E4%B8%AD%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%E8%AE%A1%E6%95%B0%E5%99%A8.png)
我正在使用算法包。每次我输入 \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。