algorithm2e:算法不起作用后对子部分的交叉引用

algorithm2e:算法不起作用后对子部分的交叉引用

在撰写论文时,我意识到与 algorithm2e 包相关的一个问题,该问题涉及遵循算法的子节的标签引用。这是一个简单的例子:

\documentclass[headsepline,footsepline,footinclude=false,oneside,fontsize=11pt,paper=a4,listof=totoc,bibliography=totoc]{scrbook} 
\usepackage[utf8]{inputenc}
\usepackage[linesnumbered,ruled,commentsnumbered]{algorithm2e}
\usepackage[hidelinks]{hyperref} 
\begin{document}
\section{Test}\label{section:test}
This is a test. 
\subsection{Test Subsection}\label{subsection:test}
We ref \ref{subsection:test}
Now follows in Alg. \ref{alg:testalgo}:
\newline 
\SetAlFnt{\small\sffamily}
\newcommand\mycommfont[1]{\footnotesize\ttfamily\textcolor{blue}{#1}}
\SetCommentSty{mycommfont}
\begin{algorithm}[H]
\caption{test}  
\label{alg:testalgo}

\DontPrintSemicolon
\SetNoFillComment
i = 1\;
i = i + 1\;
i = 2\;
\end{algorithm}
\subsubsection{Subsubsection Test}\label{subsubsection}
Lets ref the subsubsection \ref{subsubsection}
\end{document}

例子 如您所见,显示的不是章节号,而是算法的最后一个行号。如果我添加更多行,这个数字也会改变。如果删除算法,交叉引用将正常工作,请参见此处:

\documentclass[headsepline,footsepline,footinclude=false,oneside,fontsize=11pt,paper=a4,listof=totoc,bibliography=totoc]{scrbook} 
\usepackage[utf8]{inputenc}
\usepackage[linesnumbered,ruled,commentsnumbered]{algorithm2e}
\usepackage[hidelinks]{hyperref} 
\begin{document}
\section{Test}\label{section:test}
This is a test. 
\subsection{Test Subsection}\label{subsection:test}
We ref \ref{subsection:test}
\subsubsection{Subsubsection Test}\label{subsubsection}
Lets ref the subsubsection \ref{subsubsection}
\end{document}

示例2

有人有解决方案或修复这个问题吗?

编辑:如果算法后面跟着章节、节或小节,则上述示例中不会发生这种情况。只有算法后面跟着小节

答案1

由于小节没有编号,因此您无法真正使用 来引用它们\ref。标签幸存下来只是有点令人惊讶\end{algorithm},但仅此而已。

如果没有算法,标签将引用最后一个编号的标题,因此,0.1.1也没有任何意义。

如果你还想对小节进行编号,请添加

\setcounter{secnumdepth}{\subsubsectionnumdepth}

到您的文档序言中。

这将是

\setcounter{secnumdepth}{3}

与其他文档类别。

完整的示例,其中包含一些我邀请您分析的变化。

\documentclass[
  headsepline,
  footsepline,
  footinclude=false,
  oneside,
  fontsize=11pt,
  paper=a4,
  listof=totoc,
  bibliography=totoc
]{scrbook} 

\usepackage[linesnumbered,ruled,commentsnumbered]{algorithm2e}

\usepackage[hidelinks]{hyperref} 

\setcounter{secnumdepth}{\subsubsectionnumdepth}

\begin{document}

\chapter{Test}

\section{Test}\label{section:test}

This is a test. 

\subsection{Test Subsection}\label{subsection:test}

We ref \ref{subsection:test}
Now follows in Alg. \ref{alg:testalgo}:

\begin{algorithm}[H]
\SetAlFnt{\small\sffamily}
\newcommand\mycommfont[1]{\footnotesize\ttfamily\textcolor{blue}{#1}}
\SetCommentSty{mycommfont}

\caption{test}  
\label{alg:testalgo}

\DontPrintSemicolon
\SetNoFillComment
i = 1\;
i = i + 1\;
i = 2\;
\end{algorithm}

\subsubsection{Subsubsection Test}\label{subsubsection}

Lets ref the subsubsection \ref{subsubsection}

\end{document}

在此处输入图片描述

相关内容