автореф для алгоритмов

автореф для алгоритмов
\usepackage{algorithm,algpseudocode}
\usepackage{hyperref}

Поэтому, когда я

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

вывод будет выглядеть примерно так:

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

Так что, очевидно, счетчик уже ЕСТЬ.

Но

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

приведет к

[1] is simply linked to with a number.

Как сделать вывод autoref

[Algorithm 1] is ...

вместо?

решение1

\autorefработает полностью только с соответствующим \....autorefnameмакросом, т.е. \sectionautorefnameи т.п.

hyperrefизвлекает справочную информацию из информации о конкретной метке, где также хранится соответствующее имя счетчика.

Это означает, что если счетчик назван foo, \fooautorefnameон должен существовать — в противном случае он игнорируется (и на консоль выводится предупреждение).

В algorithmсреде есть счетчик с таким же именем, поэтому

\newcommand{\algorithmautorefname}{Algorithm}

предоставим hyperrefправильную информацию.

\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}

введите описание изображения здесь

Обратите внимание, что этот cleverefпакет предоставляет похожую функцию, однако имена также должны быть настроены и \crefname{algorithm}{algorithm}{algorithms}т. д.

Обновлять

Это отвечает на комментарий OP об обнаружении имен счетчиков.

Выдержка из .logфайла:

Определения счетчиков записываются в .logфайл как c@foo=\countY, где Y— номер свободного регистра счетчика и не имеют особого значения (за исключением нескольких исключений).

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

Позже мы находим

\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

Это означает, что ALG@lineэто (скорее всего) счетчик номеров строк.

Однако это «скрытый» счетчик, судя @по его названию!

решение2

Мне потребовалось полчасика, чтобы понять, что мне нужно использовать \renewcommand{} вместо просто \newcommand, чтобы перезаписать имя алгоритма hyperref по умолчанию.

Связанный контент