
\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 по умолчанию.