是否可以改变算法列表的生成方式,以在列表中的每个元素之前包含单词“算法”?

是否可以改变算法列表的生成方式,以在列表中的每个元素之前包含单词“算法”?

我尝试过使用algorithm2ealgorithmic来生成算法列表,但它们都是以这种方式进行的:

List of Algorithms

1 BFS ..... 1
2 DFS ..... 2
...

当我希望它变成这样时:

List of Algorithms

Algorithm 1 BFS ..... 1
Algorithm 2 DFS ..... 2
...

正在使用的软件包:

\documentclass[pnumabnt,normaltoc,capchap,floatnumber=continuous]{abnt}  
\usepackage[bibjustif,abnt-etal-cite=2,abnt-full-initials=yes]{abntcite}
\usepackage[toc,page]{modelo/tex/appendix}
\usepackage[portuguese,brazilian,portuges]{babel}
\usepackage[utf8]{inputenc}
\usepackage{abnt-alf}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{listings}
\usepackage{booktabs}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{eucal}
\usepackage{amssymb}
\usepackage{mathrsfs}
\usepackage[portugues]{algorithm2e}

答案1

这不是很明显吗?标题下面算法列表只有算法可以遵循?为什么要提到 20 次算法再次?

我们可以先重新定义反陈述,比如

\renewcommand*{\thealgocf}{Algorithm~\arabic{algocf}}

但是内容列表需要修改,这可以使用toclofttitletoc或之类的包来完成tocbasic

为了保持一致性,可能应该对图表、表格、章节等也采取同样的措施。我觉得这很奇怪。

答案2

算法列表的构造使用\l@algocf宏(或者至少在我使用包时使用宏algorithm2e)。这可能会略有不同,具体取决于您的算法包/设置/...

无论如何,您可以在序言中放置以下内容,以改变目录中线条的绘制方式:

\makeatletter
\let{\oldl@algocf}{\l@algocf}
\renewcommand{\l@algocf}[2]{\oldl@algocf{Algorithm #1}{#2}}
\makeatother
  • @第一行和最后一行只是允许您在宏名中使用字符。
  • 第二行复制原始\l@algocf宏(因此您可以在第三行调用它)
  • 第三行重新定义\l@algocf宏以在目录行中的第一个参数(标题文本)前插入单词 Algorithm。

答案3

我终于正确地解决了这个问题。

首先,史蒂芬·柯特维茨无法解决algorithm2e包中的问题,因为命令 \thealgocf 虽然用于表示算法列表中的编号,但它也用于算法环境的标题。而且新名称被裁剪为报告的数字这里

所以回到青蛙拍击答案是,这个想法是正确的,只是 \let 表达式是错误的。因此,要修复此问题并解决问题,只需使用以下代码:

\makeatletter
\let\oldl@algocf\l@algocf
\renewcommand{\l@algocf}[2]{\oldl@algocf{Algorithm #1}{#2}}
\makeatother

感谢 drfrogslap 的回答。

相关内容