복합 라벨 참조

복합 라벨 참조

패키지를 사용하여 Procedure라는 환경을 만들었습니다 tcolorbox. 절차에 번호가 매겨져 있으니 참고 \thechapter-\theproc하시면 좋겠습니다 .cleveref

\label{proc:One}다음은 를 사용하여 상호 참조하는 방법을 알 수 없는 최소 작업 예입니다 \cref.

    \documentclass{book}

    \usepackage{tcolorbox}
    \newcounter{proc}[chapter]
    \newtcolorbox{Procedure}[1]{title=#1}
    \usepackage{cleveref}

    \begin{document}

    \chapter{First Chapter}
    \label{ch:First}

    \refstepcounter{proc}
    \label{proc:One}%
    \begin{Procedure}%
    {%begin title
    \emph{\textbf{Procedure \thechapter-\theproc. }}A TITLE%
    }
    Some stuff
    \end{Procedure}

    I would like to refer to the above procedure but neither

    \textbf{Procedure \cref{proc:One}} on \cpageref{proc:One}

    nor

    \textbf{Procedure \labelcref{proc:One}} on \cpageref{proc:One}

    give the hoped-for

    \textbf{Procedure 1-1} on page 1

    \end{document}

답변1

Mico의 대답은 좋습니다. 여기에 또 다른 가능성이 있습니다!

기능 cleveref은 에서 이미 제공되었으며 tcolorbox, crefname=또는 Crefname=옵션을 사용하여 label=레이블에 대한 옵션으로 사용되었습니다. tcolorbox Procedure는 약간 재정의될 수 있습니다.

\documentclass{book}

\newcounter{proc}%[chapter]
\usepackage{tcolorbox}

\usepackage{cleveref}

\newtcolorbox[use counter=proc,number within=chapter,crefname={procedure}{procedures},Crefname={Procedure}{Procedures}]{Procedure}[2][]{%
  title={\textbf{\textit{Procedure \thetcbcounter. }}#2},#1}

\begin{document}


\chapter{First}
%\setcounter{chapter}{1} % just for this example

\begin{Procedure}[label={proc:One}]{A TITLE} 
Some stuff
\end{Procedure}

I would like to cross-reference the above procedure. 

Now, ``\cref{proc:One} on \cpageref{proc:One}'' and
``Procedure \labelcref{proc:One} on \cpageref{proc:One}''
both work and \cref{proc:Two} works two!

\chapter{Second}
\begin{Procedure}[label={proc:Two}]{And now for something completely different}
  Some stuff
\end{Procedure}


\end{document}

답변2

cleveref카운터와 관련된 항목에 대한 상호 참조를 "레이블"하는 방법을 알려야 합니다 proc. 이를 수행하는 한 가지 방법은 다음 지침을 사용하는 것입니다.

\crefname{proc}{Procedure}{Procedures}

지시문의 두 번째 및 세 번째 인수에는 \crefname"레이블"의 단수형과 복수형이 포함되어야 합니다.

아래 코드에서는 Procedure환경의 각 인스턴스와 관련된 오버헤드도 간소화하고 단순화했습니다.

여기에 이미지 설명을 입력하세요

\documentclass{book}

\newcounter{proc}[chapter]
% prefix the 'chapter' counter to 'proc' counter
\renewcommand{\theproc}{\thechapter-\arabic{proc}}

\usepackage{tcolorbox}
% reduce the overhead needed to create title of procedure
\newtcolorbox{Procedure}[1]{%
  title=\textbf{\textit{Procedure \theproc. }}#1}

% automatically increment the 'proc' counter at start of each 'Procedure'
\usepackage{etoolbox}
\BeforeBeginEnvironment{Procedure}{\refstepcounter{proc}}

% Provide the singular and plural forms of label associated with 'proc' counter
\usepackage{cleveref}
\crefname{proc}{Procedure}{Procedures}

\begin{document}

\setcounter{chapter}{1} % just for this example

\begin{Procedure}{A TITLE} \label{proc:One}
Some stuff
\end{Procedure}

I would like to cross-reference the above procedure. 

Now, ``\cref{proc:One} on \cpageref{proc:One}'' and
``Procedure \labelcref{proc:One} on \cpageref{proc:One}''
both work.

\end{document}

관련 정보