我希望两个环境共享一个计数器并出现在同一个列表中。其中一个环境是 algorithm2e,另一个是一个简单的框架,用于保存我想以另一种方式排版的算法。以下代码使两个环境出现在同一个算法列表中,但它们的编号不匹配,并且算法列表中每行的格式也不匹配。
这是我目前拥有的代码:
\documentclass{book}
\usepackage[lined,vlined,linesnumbered,algochapter,ruled]{algorithm2e}
\newcommand{\listofalgorithmes}{\tocfile{\listalgorithmcfname}{loa}}
\usepackage{float}
\newfloat{framealgorithm}{tbp}{loa}[chapter]
\floatname{framealgorithm}{Algorithm}
\makeatletter
\let\c@foo\c@algorithm
\renewcommand{\fnum@framealgorithm}{{\bf Algorithm~\theframealgorithm}\linespacing{1}}
\newcommand{\l@framealgorithm}{\@dottedtocline{1}{1.5em}{2.3em}}
\makeatother
\begin{document}
\listofalgorithms
\begin{algorithm}
Hello world!
\caption{Algorithm}
\end{algorithm}
\begin{framealgorithm}
Hello world from a Frame
\caption{Frame Algorithm}
\end{framealgorithm}
\end{document}
这是输出
答案1
这aliascnt
包用于将其中一个计数器设为另一个计数器的别名。由于 algorithm2e 使用
\newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}%
那么你必须对你的浮点数使用相同的设置
\newcommand\l@framealgorithm{\@dottedtocline{1}{1em}{2.3em}}
或者\l@algocf
改用1.5em
。
完整示例:
\documentclass{book}
\usepackage{aliascnt}
\usepackage[lined,vlined,linesnumbered,algochapter,ruled]{algorithm2e}
\usepackage{float}
\newcommand\listofalgorithmes{%
\tocfile{\listalgorithmcfname}{loa}}
\newfloat{framealgorithm}{thbp}{loa}[chapter]
\floatname{framealgorithm}{Algorithm}
\makeatletter
\renewcommand\fnum@framealgorithm{%
{\bfseries Algorithm~\theframealgorithm}}
\newcommand\l@framealgorithm{\@dottedtocline{1}{1em}{2.3em}}
\let\c@framealgorithm\relax
\newaliascnt{framealgorithm}{\algocf@float}
\makeatother
\begin{document}
\listofalgorithms
\begin{algorithm}
Hello world!
\caption{Algorithm}
\end{algorithm}
\begin{framealgorithm}
Hello world from a Frame
\caption{Frame Algorithm}
\end{framealgorithm}
\begin{algorithm}
Hello world!
\caption{Algorithm two}
\end{algorithm}
\begin{framealgorithm}
Hello world from a Frame
\caption{Another frame Algorithm}
\end{framealgorithm}
\end{document}
第一页的图片: