目录:

问题描述

使用algorithmicx宏包时,如果有多个算法,那么超链接总是指向第一个算法的行号。

问题重现

stackexchange问题

问题溯源

hyperref宏包中,对于每个计数器\thecounter,会生成计数器\theHcounter,用来记录其(用作超链接的)唯一标签。同时,hyperref重定义了\@settoreset之类的命令,使其同步修改\theHcounter

algorithmicx代码中,ALG@line为手动置零且未设定HALG@line,因此\theHALG@line\theALG@line,不能保证唯一。在有多标签时,hyperref会将超链接指向第一个标签。

问题修复

  • \theHALG@line设为\thealgorithm.\theALG@line,即可保证唯一。(未测试)
  • 或者使用\@addtoreset{ALG@line}{algorithm}即可。(已测试)