autoref para algoritmos

autoref para algoritmos
\usepackage{algorithm,algpseudocode}
\usepackage{hyperref}

Então quando eu

\begin{algorithm}
\caption{Baseline}\label{ALG_baseline}
\begin{algorithmic}[1]
...
\end{algorithmic}
\end{algorithm}

a saída será mais ou menos assim:

--------------------------------------
Algorithm 1: Baseline
--------------------------------------
...
--------------------------------------

Então, obviamente, já EXISTE um contador.

Mas

\autoref{ALG_baseline} is simply linked to with a number.

resultará em

[1] is simply linked to with a number.

Como posso fazer a saída autoref

[Algorithm 1] is ...

em vez de?

Responder1

\autorefsó funciona completamente com uma \....autorefnamemacro correspondente, ou seja, \sectionautorefnameetc.

hyperrefextrai as informações de referência de suas informações específicas do rótulo, onde o nome do contador relevante também é armazenado.

Isso significa que, se o contador for nomeado foo, \fooautorefnamedeverá existir - caso contrário, será ignorado (e um aviso será enviado ao console).

O algorithmambiente possui um contador com o mesmo nome, então

\newcommand{\algorithmautorefname}{Algorithm}

fornecerá hyperrefas informações corretas.

\documentclass{article}

\usepackage{algorithm,algpseudocode}
\usepackage{hyperref}

\newcommand{\algorithmautorefname}{Algorithm}

\begin{document}
\begin{algorithm}
\caption{Baseline}\label{ALG_baseline}
%\begin{algorithmic}[1]
%
%\end{algorithmic}
\end{algorithm}

\autoref{ALG_baseline} is simply linked to with a number.

\end{document}

insira a descrição da imagem aqui

Observe que esse cleverefpacote oferece um recurso semelhante, porém, os nomes também devem ser configurados, com \crefname{algorithm}{algorithm}{algorithms}etc.

Atualizar

Isso aborda o comentário do OP sobre a detecção de nomes de contadores.

Um trecho do .logarquivo:

As definições do contador são gravadas no .logarquivo como c@foo=\countY, onde Yé o número de um registro de contador livre e não é realmente importante (exceto algumas exceções).

\@float@every@algorithm=\toks16
\c@algorithm=\count88

Mais tarde, encontramos

\c@ALG@line=\count89
\c@ALG@rem=\count90
\c@ALG@nested=\count91
\ALG@tlm=\skip43
\ALG@thistlm=\skip44
\c@ALG@Lnr=\count92
\c@ALG@blocknr=\count93
\c@ALG@storecount=\count94
\c@ALG@tmpcounter=\count95
\ALG@tmplength=\skip45

Isso significa que ALG@lineé (muito provavelmente) o contador do número da linha.

Porém, é um contador 'oculto', devido ao @uso no nome!

Responder2

Levei meio minuto para descobrir que precisava usar \renewcommand{} em vez de apenas \newcommand para substituir o nome do algoritmo padrão do hyperref.

informação relacionada