\listofalgorithms 无法与文档类 puthesis 中的 algorithm2e 配合使用

\listofalgorithms 无法与文档类 puthesis 中的 algorithm2e 配合使用

我正在使用 algorithm2e 包在我的论文中添加一些算法,并在序言中添加以下几行:

\usepackage[]{algorithm2e}

但是,我无法将算法列表添加到我的目录中。当我尝试使用 \listofalgorithms 时,我收到以下错误消息

(./doc.loa
! Missing number, treated as zero.
<to be read again> 
                   \edef 
l.2 ...gnorespaces Simple Algorithm}}{1}{algocf.1}

我认为问题与这两个文件的使用有关——puthesis.clspulongtable.sty我需要将其用于我的论文。我在下面提供了一个最小工作示例,当我在其上运行 pdflatex 两次时,它会抛出错误。

由 muzimuzi Z 添加:要运行以下示例,您需要获取notoccite.sty也一样。

\documentclass[ece,bypass]{puthesis}
\usepackage{float}
\usepackage{hyperref}
\usepackage[]{algorithm2e}
\title{MWE}
\author{Zuko Aang}{Aang, Zuko}
\campus{Indianapolis}

\begin{document}
\volume

\listofalgorithms

\chapter{Hello}
\section{Test}
\begin{algorithm}[H]
  \caption{Simple Algorithm}
  Hello
  \label{alg:Simple Algorithm}
\end{algorithm}

\end{document}

任何帮助都将不胜感激。谢谢

答案1

解决方案

重新定义\l@algocf

\documentclass[ece,bypass]{puthesis}
\usepackage{float}
\usepackage{algorithm2e}
\usepackage{hyperref}

\title{MWE}
\author{Zuko Aang}{Aang, Zuko}
\campus{Indianapolis}

\makeatletter
\renewcommand*\l@algocf{\@dottedtocline{1}{\smalltocskip}{1em}{2.3em}}
\makeatother

\begin{document}
\volume
\listofalgorithms

\chapter{Hello}
\section{Test}
\begin{algorithm}[H]
  \caption{Simple Algorithm}
  Hello
  \label{alg:Simple Algorithm}
\end{algorithm}

\end{document}

解释

在 中puthesis.cls,命令\@dottedtocline被重新定义为接受一个额外的参数作为其新的第二个参数。这#2表示在每个内容项(例如 中的部分\tableofcontents或 算法\listofalgorithms)之前的额外垂直跳过。在 中puthesis.cls\smalltocskip被传递给和等命令的重新定义中#2的。例如,\@dottedtocline\l@section\l@subsection

% before, in report.cls
\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}

% after, in puthesis.cls (comments are copied from puthesis.cls too)
% Got these lines using "grep dotted report.cls" and changed
% as needed for new \@dottedtocline \vskip parameter.
\renewcommand*\l@section{\@dottedtocline{1}{\smalltocskip}{1.5em}{2.3em}}
\renewcommand*\l@subsection{\@dottedtocline{2}{\smalltocskip}{3.8em}{3.2em}}

因此解决的办法是重新定义 中某个算法项的内部命令\listofalgorithms,即\l@algocf,以与 的变化同步\@dottedtocline

% before, in algorithm2e.sty
% \newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}

% after, in my answer
\renewcommand*\l@algocf{\@dottedtocline{1}{\smalltocskip}{1em}{2.3em}}

相关内容