化合物ラベルによる参照

化合物ラベルによる参照

パッケージを使用して環境 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は若干再定義できます。tcolorboxcrefname=Crefname=label=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。これを行う1つの方法は、命令を使用することです。

\crefname{proc}{Procedure}{Procedures}

ディレクティブの 2 番目と 3 番目の引数には、\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}

関連情報