我想更改算法中行号的第一个数字,但该怎么做?这是我的例子:
\documentclass[12pt]{beamer}
\usepackage{amsmath, amsfonts, amssymb, amsthm}
\usepackage{algorithmic, algorithm}
\usepackage{float}
\renewcommand\thealgorithm{}
\begin{document}
\begin{frame}[t, fragile]
\frametitle{...}
\begin{algorithm}[H]
\caption{...}
\begin{algorithmic}[1]
\STATE ...
\end{algorithmic}
\end{algorithm}
\end{frame}
\end{document}
例如,第一个状态应编号为 2。
答案1
行号algorithmic
(来自algorithms
捆) 由计数器控制ALC@line
。以下 MWE 定义\setalglineno{<num>}
允许您修改任何行的编号algorithmic
:
\documentclass[12pt]{beamer}
\usepackage{algorithmic,algorithm,float}
\renewcommand\thealgorithm{}
\newcommand{\setalglineno}[1]{%
\setcounter{ALC@line}{\numexpr#1-1}}
\begin{document}
\begin{frame}[t, fragile]
\frametitle{...}
\begin{algorithm}[H]
\caption{...}
\begin{algorithmic}[1]
\setalglineno{2}% Set following line number to 2
\STATE ...
\end{algorithmic}
\end{algorithm}
\end{frame}
\end{document}
事实上,\setalglineno{<num>}
设置ALC@line
为<num>-1
,因为算法设置在一个列表中,其中每一行计数器都会增加前它已设置。因此,从技术上讲,要获得编号为 2 的行,您需要将计数器值设置为 1。
类似的设置可在以下环境(或同等环境中)使用algpseudocode
:algorithmicx
。对于这些你必须使用ALG@line
而不是ALC@line
虽然。
答案2
当算法分布在多个部分时,为每个标签发明一个新名称(正如 Werner 的解决方案所要求的那样)可能会很麻烦。
基于行号只是计数器这一事实,这里还有另一种方法:为行号创建一个新计数器。当算法环境关闭时,保存计数器。当恢复算法时,恢复计数器。
梅威瑟:
对应代码(ALG@line@
前缀任意选择):
\documentclass[12pt]{report}
\usepackage{algorithm,algpseudocode}
\newcommand{\alglinenoNew}[1]{\newcounter{ALG@line@#1}}
\newcommand{\alglinenoPop}[1]{\setcounter{ALG@line}{\value{ALG@line@#1}}}
\newcommand{\alglinenoPush}[1]{\setcounter{ALG@line@#1}{\value{ALG@line}}}
\begin{document}
Start:
\begin{algorithmic}[1]
\State First
\alglinenoNew{alg1}
\alglinenoPush{alg1}
\end{algorithmic}
Continuation:
\begin{algorithmic}[1]
\alglinenoPop{alg1}
\State Second
\State Third
\alglinenoPush{alg1}
\end{algorithmic}
More:
\begin{algorithmic}[1]
\alglinenoPop{alg1}
\State Fourth
\alglinenoPush{alg1}
\end{algorithmic}
\end{document}