
Para establecer el nombre del \autoref
comando para un algoritmo utilizo:
\newcommand{\algorithmautorefname}{Algorithm}
me gusta comentadoaquí. También me gustaría poder hacer referencia a líneas dentro de un algorithmic
entorno con 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}
me da correctamenteAlgoritmo 1. Además, también me gustaría haber \autoref{algl:y}
generadolínea 2. Hasta ahora estoy usando: line~\ref{algl:y}
.
viendo elmisma respuestapuede definir los nombres de autoref mediante: \....autorefname
. Pero luego menciona que algunos contadores están ocultos, por ejemplo la numeración de líneas: \c@ALG@line
. ¿Es posible crear un nombre autoref para ellos?
Yo he tratado:
\newcommand{\ALGlineautorefname}{line}
\newcommand{\ALG_lineautorefname}{line}
\newcommand{\ALG@lineautorefname}{line}
pero ninguno funciona y solo se compila el primero.
Si es posible, ¿cómo puedo crear una \autorefname
línea en un algorithmic
entorno?
Respuesta1
El contador de líneas está ocultohyperref
Es \autoref
porque el contador se escalona usando \addtocounter{ALG@line}{1}
en lugar de \refstepcounter{ALG@line}
. El siguiente parche corrige esto, permitiéndole definir \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}
Respuesta2
La siguiente es una cleveref
solución basada en -. Nota: \cref
(la macro de usuario principal del cleveref
paquete) funciona de manera muy similar a \autoref
, excepto que en realidad es mucho más potente y flexible que \autoref
. Por ejemplo, \cref
puede aceptar varios argumentos; vea el código a continuación para ver un ejemplo. Más buenas noticias: cleveref
está programado "listo para usar" para saber que las líneas en un algorithmic
entorno deben llamarse, bueno, "líneas"; no es necesario que proporcione esta configuración usted mismo.
\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}