我测试了我制作的 PDF 文件中的某些链接,发现指向某个算法的所有链接(来自包algorithm2e
)都会跳转到该算法的开头,跳过算法标题的一半和算法的标题。我使用包ruled
的选项algorithm2e
,这样标题就会位于实际算法上方。
这是一个简单的例子:
\documentclass{scrbook}
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}
\usepackage[ruled]{algorithm2e}
\begin{document}
Der Algorithmus \ref{alg:roundoff} approximiert das ''Closest Vector Problem``.
\newpage
\begin{algorithm}
\caption{\label{alg:roundoff}Babais \textsf{ROUNDING OFF-PROCEDURE}}
\emph{Berechne $r_1, r_2, \ldots, r_n \in R$, sodass $\vec{q} = r_1\vec{b}_1+r_2\vec{b}_2+\cdots+r_n\vec{b}_n$ gilt.}\\
$\vec{v} := \vec{0}$\\
\For{$i = 1,2,\ldots,n$}
{
$\vec{v} := \vec{v} + \lfloor r_i\rceil \cdot \vec{b}_i$
}
\end{algorithm}
\end{document}
此代码将在第一页生成一个(蓝色)链接,指向第二页上的算法。但是当缩放并单击链接后,它将跳转到算法的以下部分:
问题:是否可以调整算法的跳转位置(从包开始),这样即使使用包的选项,algorithm2e
单击也会跳转到算法标题/标题之前的位置?ruled
algorithm2e
答案1
由于您使用的是ruled
样式,因此标题始终放在顶部。因此,我们可以修补algorithm
环境的开始并插入由相当于hypcap
for [ruled]{algorithm2e}
?。
以下补丁由xpatch
,因为的定义algorithm
采用可选参数:
\documentclass{scrbook}% http://ctan.org/pkg/koma-script
\usepackage[ruled]{algorithm2e}% http://ctan.org/pkg/algorithm2e
\usepackage[colorlinks=true,linkcolor=blue]{hyperref}% http://ctan.org/pkg/hyperref
\usepackage{hypcap,xpatch}% http://ctan.org/pkg/{hypcap,xpatch}
\makeatletter
% \xpatch{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
\xpatchcmd{\algorithm}{\ignorespaces}{\ignorespaces%
\smash{\raisebox{1.5\baselineskip}{\capstart}}}{}{}
% Insert \capstart immediately after algorithm environment starts
\makeatother
\begin{document}
Der Algorithmus \ref{alg:roundoff} approximiert das ''Closest Vector Problem``.
\newpage
\begin{algorithm}
\caption{\label{alg:roundoff}Babais \textsf{ROUNDING OFF-PROCEDURE}}
\emph{Berechne $r_1, r_2, \ldots, r_n \in R$, sodass $\vec{q} = r_1\vec{b}_1+r_2\vec{b}_2+\cdots+r_n\vec{b}_n$ gilt.}\\
$\vec{v} := \vec{0}$\\
\For{$i = 1,2,\ldots,n$}
{
$\vec{v} := \vec{v} + \lfloor r_i\rceil \cdot \vec{b}_i$
}
\end{algorithm}
\end{document}
算法名称不跨多行的所有情况都应涵盖。一个缺点是放置双重超目标,导致“具有相同标识符的目标”hyperref
/pdfTeX 警告。