在撰写论文时,我意识到与 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}
有人有解决方案或修复这个问题吗?
编辑:如果算法后面跟着章节、节或小节,则上述示例中不会发生这种情况。只有算法后面跟着小节
答案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}