\autoref
要设置我使用的算法的命令名称:
\newcommand{\algorithmautorefname}{Algorithm}
喜欢评论这里。我还希望能够使用 来引用algorithmic
环境中的线路line x
。
\begin{algorithm}
\label{alg:myalg}
\begin{algorithmic}[1]
\State Do X
\State Do Y \label{algl:y}
\State $x = y + z$
\end{algorithmic}
\end{algorithm}
\autoref{alg:myalg}
给了我正确的算法 1。此外,我还想\autoref{algl:y}
生成2号线. 到目前为止我正在使用:line~\ref{algl:y}
。
看到同样的答案您可以通过以下方式定义自动引用名称:\....autorefname
。但是他提到一些计数器是隐藏的,例如行号:\c@ALG@line
。是否可以为它们创建一个自动引用名称?
我努力了:
\newcommand{\ALGlineautorefname}{line}
\newcommand{\ALG_lineautorefname}{line}
\newcommand{\ALG@lineautorefname}{line}
但没有一个能工作,只有第一个能编译。
如果可能的话,我如何\autorefname
在环境中创建一条线路algorithmic
。
答案1
行计数器隐藏于hyperref
因为\autoref
计数器是使用\addtocounter{ALG@line}{1}
而不是 来步进的\refstepcounter{ALG@line}
。以下补丁程序纠正了这个问题,允许您定义\ALG@lineautorefname
:
\documentclass{article}
\usepackage{algorithm,algpseudocode}
\usepackage{hyperref,etoolbox}
\makeatletter
\patchcmd{\ALG@step}{\addtocounter{ALG@line}{1}}{\refstepcounter{ALG@line}}{}{}
\newcommand{\ALG@lineautorefname}{Line}
\makeatother
\newcommand{\algorithmautorefname}{Algorithm}
\begin{document}
See \autoref{alg:myalg}, specifically \autoref{algl:y}.
\begin{algorithm}
\caption{An algorithm}\label{alg:myalg}
\begin{algorithmic}[1]
\State Do X
\State Do Y \label{algl:y}
\State $x = y + z$
\end{algorithmic}
\end{algorithm}
\end{document}
答案2
以下是cleveref
基于 的解决方案。注意:\cref
(包的主要用户宏cleveref
)的工作方式与 非常相似\autoref
,只是它实际上比 更强大、更灵活\autoref
。例如,\cref
可以接受多个参数;请参阅下面的代码以获取示例。另一个好消息:cleveref
是“开箱即用”的,知道algorithmic
环境中的行应该称为“行”——无需自己提供此设置。
\documentclass{article}
\usepackage{algorithm,algpseudocode}
\usepackage[colorlinks]{hyperref}
\usepackage[noabbrev,capitalize,nameinlink]{cleveref}
\begin{document}
\begin{algorithm}
\caption{Baseline}\label{ALG_baseline}
\begin{algorithmic}[1]
\State Do X
\State Do Y \label{algl:y}
\State $x = y + z$ \label{algl:sum}
\end{algorithmic}
\end{algorithm}
\cref{algl:y} in \cref{ALG_baseline} is \dots
\cref{algl:y,algl:sum} of the algorithm are based on \dots
\end{document}