![\listofalgorithms 无法与文档类 puthesis 中的 algorithm2e 配合使用](https://linux22.com/image/414392/%5Clistofalgorithms%20%E6%97%A0%E6%B3%95%E4%B8%8E%E6%96%87%E6%A1%A3%E7%B1%BB%20puthesis%20%E4%B8%AD%E7%9A%84%20algorithm2e%20%E9%85%8D%E5%90%88%E4%BD%BF%E7%94%A8.png)
我正在使用 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.cls
和pulongtable.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}}