
\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
대신에 \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}