我试图在算法列表中的每个条目前添加“算法”一词(因为不可避免的论文指导方针)。
我看到了类似的问题,但那里列出的解决方案对我来说不起作用。我不确定是否要重新提出这些问题,因此将其单独发布。如果这不是正确的礼仪,请道歉。
是否可以改变算法列表的生成方式,以在列表中的每个元素之前包含单词“算法”? (我使用“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.5em
0pt
答案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%
}
首先考虑图表目录已经具有所需的格式。