
Чтобы задать имя команды \autoref
для алгоритма, я использую:
\newcommand{\algorithmautorefname}{Algorithm}
нравится прокомментировалздесь. Я также хотел бы иметь возможность ссылаться на строки внутри algorithmic
среды с помощью 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}
дает мне правильноАлгоритм 1. Кроме того, я бы также хотел иметь возможность \autoref{algl:y}
генерироватьстрока 2. До сих пор я использую: line~\ref{algl:y}
.
Видятот же ответвы можете определить имена автореф как: \....autorefname
. Но затем он упоминает, что некоторые счетчики скрыты, например, нумерация строк: \c@ALG@line
. Возможно ли создать для них имя автореф?
Я пытался:
\newcommand{\ALGlineautorefname}{line}
\newcommand{\ALG_lineautorefname}{line}
\newcommand{\ALG@lineautorefname}{line}
но ни один из них не работает, и компилируется только первый.
Если возможно, как мне создать \autorefname
для линии в algorithmic
среде.
решение1
Счетчик строк скрыт отhyperref
's, \autoref
потому что счетчик пошагово использует \addtocounter{ALG@line}{1}
вместо \refstepcounter{ALG@line}
. Следующий патч исправляет это, позволяя вам определить \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}
решение2
Ниже приведено cleveref
решение на основе . Примечание: \cref
(основной пользовательский макрос пакета cleveref
) работает очень похоже на \autoref
, за исключением того, что он на самом деле гораздо более мощный и гибкий, чем \autoref
. Например, \cref
может принимать несколько аргументов; см. код ниже для примера. Еще одна хорошая новость: cleveref
запрограммирован "из коробки" на знание того, что линии в algorithmic
среде должны называться, ну, "линиями" -- нет необходимости предоставлять эту настройку самостоятельно.
\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}