Autoref für Algorithmen

Autoref für Algorithmen
\usepackage{algorithm,algpseudocode}
\usepackage{hyperref}

Wenn ich also

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

Die Ausgabe sieht ungefähr so ​​aus:

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

Es gibt also offensichtlich bereits einen Zähler.

Aber

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

wird in

[1] is simply linked to with a number.

Wie erstelle ich eine Autoref-Ausgabe?

[Algorithm 1] is ...

stattdessen?

Antwort1

\autoreffunktioniert komplett nur mit entsprechendem \....autorefnameMakro \sectionautorefnameetc.

hyperrefextrahiert die Referenzinformationen aus den spezifischen Etiketteninformationen, in denen auch der entsprechende Zählername gespeichert ist.

Dies bedeutet, dass der Zähler, wenn er den Namen hat foo, \fooautorefnamevorhanden sein muss – andernfalls wird er ignoriert (und eine Warnung an die Konsole gesendet).

Die algorithmUmgebung hat einen Zähler mit dem gleichen Namen, also

\newcommand{\algorithmautorefname}{Algorithm}

hyperrefwird die richtigen Informationen liefern .

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

Bildbeschreibung hier eingeben

Bitte beachten Sie, dass das cleverefPaket eine ähnliche Funktion bereitstellt, die Namen müssen jedoch ebenfalls eingerichtet werden \crefname{algorithm}{algorithm}{algorithms}usw.

Aktualisieren

Dies geht auf den Kommentar des OP zum Erkennen von Zählernamen ein.

Ein Auszug der .logDatei:

Die Zählerdefinitionen werden .logals in die Datei geschrieben c@foo=\countY, wobei Ydie Nummer eines freien Zählerregisters ist und (von wenigen Ausnahmen abgesehen) nicht wirklich wichtig ist.

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

Später finden wir

\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

Dies bedeutet, dass es ALG@linesich (sehr wahrscheinlich) um den Zeilennummernzähler handelt.

Aufgrund der @Verwendung im Namen handelt es sich jedoch um einen „versteckten“ Zähler!

Antwort2

Ich habe eine halbe Stunde gebraucht, um herauszufinden, dass ich \renewcommand{} statt nur \newcommand verwenden musste, um den Hyperref-Standardalgorithmusnamen zu überschreiben.

verwandte Informationen