我尝试使用以下方法对 AMS 和 algorithm2e 算法环境使用相同的计数器
\usepackage{aliascnt}
\makeatletter
\let\c@algocf\relax
\makeatother
\newaliascnt{algocf}{thm}
如这里所述amsthm 与 algorithm 之间的共享计数器。
这是我的 MWE 代码。它是用 Lyx 创建的,因为我的论文就是用它写的。
%% LyX 2.1.4 created this file. For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{amsmath}
\usepackage{amsthm}
\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
\theoremstyle{plain}
\newtheorem{thm}{\protect\theoremname}
\theoremstyle{plain}
\newtheorem{lyxalgorithm}[thm]{\protect\algorithmname}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
% algorithms
\usepackage[linesnumbered,algoruled,boxed,lined,english]{algorithm2e}
\usepackage{aliascnt}
\makeatletter
\let\c@algocf\relax % drop existing counter
\makeatother
\newaliascnt{algocf}{thm}
\makeatother
\usepackage{babel}
\providecommand{\algorithmname}{Algorithm}
\providecommand{\theoremname}{Theorem}
\begin{document}
\begin{lyxalgorithm}
\label{alg1}
Do stuff.
\end{lyxalgorithm}
\begin{algorithm}[H]
\label{alg2}
Do other stuff.
\caption{$\leftarrow$ Prints the correct number 2}
\end{algorithm}
\begin{lyxalgorithm}
\label{alg:alg3}
Just be!
\end{lyxalgorithm}
Here is a reference to Algorithm \ref{alg1}, Algorithm \ref{alg2} and Algorithm \ref{alg:alg3}.
\end{document}
如何让 \ref{alg2} 打印正确的数字 2 而不是 1?
答案1
我相信如果你在这行中包含 algochapter:“\usepackage[linesnumbered,algoruled,boxed,lined,english,算法篇]{算法2e}”
您还必须将 \newaliascnt 放在 \newtheorems 之前
此外,\newaliascnt{algocf}{thm} 让“algocf”成为“thm”的别名,但这并不是您真正想要的,因为 algocf 已被定义为 algorithm2e 的计数器,它不能成为另一个计数器的别名。它应该是 \newaliascnt{thm}{algocf}。
以下链接可能对您有帮助:带章节编号的算法