\autoref를 사용하여 '알고리즘' 환경에서 행에 대한 스마트 상호 참조를 만듭니다.

\autoref를 사용하여 '알고리즘' 환경에서 행에 대한 스마트 상호 참조를 만듭니다.

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

관련 정보