我的浮动项目链接到了错误的实体

我的浮动项目链接到了错误的实体

我正在使用.sty我大学的文件准备我的论文。在这个文件中,有一个“算法”浮点数,我用它来定义

算法 1,算法 2,...

我的问题是,无论附录部分中的算法标签是什么,当我调用它们时,它们的参考编号都会链接到主体中的算法,而不是它们所属的算法。

经过一番研究,我意识到文件中有部分内容.sty控制着“算法列表”的组织方式。此文件创建一个扩展名的文件.lom,该文件保存了有关算法列表的所有信息。在此文件中,附录算法的标签链接到正文中的算法!请参阅以下文件中.sty讨论“算法列表”规则的部分。我想知道是否有人可以帮助我调试这些行。

\def\listofalgorithms{%
\newpage
\addcontentsline{toc}{chapter}{LIST OF ALGORITHMS}
\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi
\hbox{ }
\twoinmar
\centerline{\large\bf LIST OF ALGORITHMS}
\vspace{0.7in}
\begin{doublespace}
\@starttoc{lom}\if@restonecol\twocolumn\fi
\addtocontents{lom}{\noindent\underline{\bf Algorithm}\hfill\rm\protect\newline}
\end{doublespace}
\pagestyle {empty}
}

\newcounter{algorithm}[chapter]
\def\thealgorithm{\@arabic\c@chapter.\@arabic\c@algorithm}
\def\fps@algorithm{tbp}
\def\ftype@algorithm{1}
\def\ext@algorithm{lom}
\def\fnum@algorithm{Algorithm\thealgorithm}
\def\algorithm{\@float{algorithm}}
\let\endalgorithm\end@float
\@namedef{algorithm*}{\@dblfloat{algorithm}}
\@namedef{endalgorithm*}{\end@dblfloat}

答案1

我创建了部分 MWE,但由于无法访问大学.sty文件,我\listofalgorithms什么也做不了。使用\label\ref工作正常。写入lom文件的唯一内容是标题行。您应该搜索涉及\@writefile{lom}或至少的任何内容\@writefile

\documentclass{book}
\usepackage{lipsum}

\let\twoinmar=\relax

\makeatletter
\def\listofalgorithms{%
\newpage
\addcontentsline{toc}{chapter}{LIST OF ALGORITHMS}
\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi
\hbox{ }
\twoinmar
\centerline{\large\bf LIST OF ALGORITHMS}
\vspace{0.7in}
%\begin{doublespace}% also undefined
\@starttoc{lom}\if@restonecol\twocolumn\fi
\addtocontents{lom}{\noindent\underline{\bf Algorithm}\hfill\rm\protect\newline}
%\end{doublespace}
\pagestyle {empty}
}

\newcounter{algorithm}[chapter]
\def\thealgorithm{\@arabic\c@chapter.\@arabic\c@algorithm}
\def\fps@algorithm{tbp}
\def\ftype@algorithm{1}
\def\ext@algorithm{lom}
\def\fnum@algorithm{Algorithm\thealgorithm}
\def\algorithm{\@float{algorithm}}
\let\endalgorithm\end@float
\@namedef{algorithm*}{\@dblfloat{algorithm}}
\@namedef{endalgorithm*}{\end@dblfloat}
\makeatother

\usepackage{hyperref}

\renewcommand{\thealgorithm}{\thechapter.\arabic{algorithm}}

\begin{document}
\listofalgorithms

\chapter{dummy}

\ref{first}

\ref{second}

\begin{algorithm}
\label{first}
first algorithm
\end{algorithm}

\lipsum[1-4]

\appendix
\chapter{this space intentionally left blank}

\begin{algorithm}
\label{second}
second algorithm
\end{algorithm}

\lipsum[5-8]
\end{document}

相关内容