
Um den Namen des \autoref
Befehls für einen Algorithmus festzulegen, verwende ich:
\newcommand{\algorithmautorefname}{Algorithm}
wie kommentiertHier. Ich möchte auch in der Lage sein, algorithmic
mit auf Zeilen innerhalb einer Umgebung zu verweisen 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}
gibt mir richtigAlgorithmus 1. Außerdem möchte ich auch \autoref{algl:y}
generierenZeile 2. Bisher verwende ich: line~\ref{algl:y}
.
Sehen Sie diegleiche AntwortSie können die Autoref-Namen wie folgt definieren: \....autorefname
. Dann erwähnt er jedoch, dass einige Zähler ausgeblendet sind, beispielsweise die Zeilennummerierung: \c@ALG@line
. Ist es möglich, einen Autoref-Namen für sie zu erstellen?
Ich habe versucht:
\newcommand{\ALGlineautorefname}{line}
\newcommand{\ALG_lineautorefname}{line}
\newcommand{\ALG@lineautorefname}{line}
aber keines funktioniert und nur das erste wird kompiliert.
Wenn möglich, wie kann ich eine \autorefname
für eine Zeile in einer algorithmic
Umgebung erstellen?
Antwort1
Der Zeilenzähler ist ausgeblendet vonhyperref
liegt \autoref
daran, dass der Zähler mit \addtocounter{ALG@line}{1}
anstelle von schrittweise erhöht wird \refstepcounter{ALG@line}
. Der folgende Patch korrigiert dies und ermöglicht Ihnen die Definition von \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}
Antwort2
Das Folgende ist eine cleveref
auf -basierte Lösung. Hinweis: \cref
(das Hauptbenutzermakro des cleveref
Pakets) funktioniert sehr ähnlich wie \autoref
, ist aber tatsächlich viel leistungsfähiger und flexibler als \autoref
. Beispielsweise \cref
kann mehrere Argumente annehmen; ein Beispiel finden Sie im Code unten. Weitere gute Neuigkeiten: cleveref
ist „out of the box“ so programmiert, dass es weiß, dass Zeilen in einer algorithmic
Umgebung, nun ja, „Zeilen“ genannt werden sollten – Sie müssen diese Einrichtung nicht selbst bereitstellen.
\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}