我想使用 algorithm2e 包提供现有算法的替代版本。我的源代码如下:
\begin{algorithm}[t]
\dots \;
\nlset{\ref{alg:previous:ref}} alternative line content \;
\dots \;
\end{algorithm}
但是,该源导致以下编译错误:! \reserved@a 的参数有一个额外的 }。
有什么帮助吗?
编辑
模拟错误的最小文档:
\documentclass{article}
\usepackage{algorithm2e}
\usepackage{hyperref}
\begin{document}
\begin{algorithm}
line content \; \label{alg:previous:ref}
\end{algorithm}
\begin{algorithm}
\nlset{\ref{alg:previous:ref}} alternative line content \;
\end{algorithm}
\end{document}
问题似乎发生在加载 hyperref 包时,如果没有它,它会运行良好。
答案1
您可以提取参考编号并将其存储在计数器中refcount
。这是您的 MWE,目前正在与hyperref
:
\documentclass{article}
\usepackage{algorithm2e}% http://ctan.org/pkg/algorithm2e
\usepackage{refcount}% http://ctan.org/pkg/refcount
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\newcounter{mycount}% To store extracted references
% Default printing using \themycount will be \arabic
\begin{document}
\begin{algorithm}
line content \; \label{alg:previous:ref}
\end{algorithm}
\begin{algorithm}
\setcounterref{mycount}{alg:previous:ref}%
\nlset{\themycount} alternative line content \;
\end{algorithm}
\end{document}
当然,引用本身已经丢失。但是,我不确定您是否有兴趣保留超引用,因为很难理解它所用的上下文。