在算法列表中的每个条目前添加单词“算法”

在算法列表中的每个条目前添加单词“算法”

我试图在算法列表中的每个条目前添加“算法”一词(因为不可避免的论文指导方针)。

我看到了类似的问题,但那里列出的解决方案对我来说不起作用。我不确定是否要重新提出这些问题,因此将其单独发布。如果这不是正确的礼仪,请道歉。

是否可以改变算法列表的生成方式,以在列表中的每个元素之前包含单词“算法”? (我使用“algorithm”包而不是“algorithm2e”)

将算法标签添加到算法列表中(不确定列出的解决方案是否需要其他包,因为列出的解决方案对我来说不起作用)

电流输出:

List of Algorithms
1 Optimization . . . . . . . . 3

期望输出:

List of Algorithms
Algorithm 1 Optimization . . . . . . . . 3

以下是一个简化的代码示例,说明了这个问题。非常感谢您的帮助。请告诉我如何获得此示例所需的行为。

\documentclass[letter,10pt]{book}                                                                                                                                                                             
\usepackage[utf8x]{inputenc}

\usepackage[breaklinks]{hyperref}
\usepackage{algorithm}
\usepackage{algorithmic}

\title{Sample book}
\begin{document}
\listofalgorithms

\chapter{Sample}
% Outline
\begin{algorithm}[!hbt]
    \centering
    \caption{Optimization}\label{alg:pso}
    \begin{algorithmic}[1]
        \STATE \textit{GenerateInitialPopulation}(pop)
        \FOR {particle $ \leftarrow $ 1 \textit{to} numParticles}
          \STATE \textit{Evaluate}(particle)
        \ENDFOR
    \end{algorithmic}
\end{algorithm}

\end{document}

答案1

下面的代码片段将Algorithm~在算法列表(LoA)中每个算法的数字前插入:

\begingroup
\let\oldnumberline\numberline
\renewcommand{\numberline}{Algorithm~\oldnumberline}
\listofalgorithms
\endgroup

它重新定义了\numberline将算法编号插入并设置到 LoA 中的宏。有关这些宏的含义和位置/用法的详细讨论,请阅读tocloft包裹 文档(部分1.1 LaTeX 的方法)。括号(或使用\begingroup...分组\endgroup)可局部化范围,因此不会影响\numberline其他内容结构的使用。以下是重新定义的完整代码,\listofalgorithms因此可以在文档主体内干净地使用它:

在此处输入图片描述

\documentclass{book}
\usepackage[breaklinks]{hyperref}
\usepackage{algorithm,algorithmic}

\let\oldlistofalgorithms\listofalgorithms
\renewcommand{\listofalgorithms}{%
  \begingroup%
  \let\oldnumberline\numberline%
  \renewcommand{\numberline}{Algorithm~\oldnumberline}%
  \oldlistofalgorithms%
  \endgroup}
\begin{document}

\listofalgorithms

\chapter{Sample}
% Outline
\begin{algorithm}[!hbt]
  \centering
  \caption{Optimization}\label{alg:pso}
  \begin{algorithmic}[1]
    \STATE \textit{GenerateInitialPopulation}(pop)
    \FOR {particle $ \leftarrow $ 1 \textit{to} numParticles}
      \STATE \textit{Evaluate}(particle)
    \ENDFOR
  \end{algorithmic}
\end{algorithm}

\end{document}

如果您希望避免在边距和算法内容条目之间引入水平空间,则可以使用以下重新定义\listofalgorithms

\makeatletter
\renewcommand{\listofalgorithms}{%
  \begingroup%
  \let\oldnumberline\numberline%
  \let\old@dottedtocline\@dottedtocline
  \renewcommand{\@dottedtocline}[5]{\old@dottedtocline{##1}{0pt}{##3}{##4}{##5}}%
  \renewcommand{\numberline}{Algorithm~\oldnumberline}%
  \oldlistofalgorithms%
  \endgroup}
\makeatother

上述更新改变了通常放在第二个参数中的\@dottedtocline默认间距。1.5em0pt

在此处输入图片描述

答案2

两者都对我有用:

\makeatletter
\let\l@algocf\l@figure
\makeatother
\let\oldfigurename\figurename
\renewcommand{\figurename}{\algorithmcfname}
\listofalgorithms
\renewcommand{\figurename}{\oldfigurename}

\let\oldlistofalgorithms\listofalgorithms
\let\oldnumberline\numberline%
\newcommand{\algnumberline}[1]{Algorithm~#1 -- }
\renewcommand{\listofalgorithms}{%
  \let\numberline\algnumberline%
  \oldlistofalgorithms
  \let\numberline\oldnumberline%
}

首先考虑图表目录已经具有所需的格式。

相关内容