使用 cleveref-package 交叉引用 tcolorbox

使用 cleveref-package 交叉引用 tcolorbox

感谢 Thomas F. Sturm (https://tex.stackexchange.com/a/124688/15907), 我有一个用于在 LaTeX 中创建美观的源代码的小环境。

我从这里开始了我的环境:

\begin{listingsbox}[label={lst:agent:logstash:configuration}]{mycode}{Konfiguration von LogStash auf Agent}

(方括号内的部分与 tcolorbox 的命令相同。)

我还有自己的小 ref 命令:

\newcommand{\myref}[1]{see \cref{#1} \nameref{#1} \vpageref{#1}}

所以我得到了类似这样的信息:“参见第 31 页的图 3.1:如何扔木头”,这真的很好。

如果我对 tcolorbox 的标签执行此操作:

\myref{lst:agent:logstash:configuration}

我得到:“参见第 31 页的?? 3.1:LogStash 的配置”。

如您所见,cleveref这里无法提供正确的名称。我知道在定义它时可以更改它,\crefname{<type>}{<singular>}{<plural>}但我不知道必须提供哪种类型。

有人有线索吗?

答案1

您要找的类型是tcb@cnt@mintedbox

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{minted}
\usepackage{cleveref}

\newminted[mycsharp]{csharp}{tabsize=2,fontsize=\footnotesize}
\newminted[myjson]{js}{tabsize=2,fontsize=\footnotesize}
\newminted[myxml]{xml}{tabsize=2,fontsize=\footnotesize}
\newminted[myshell]{shell-session}{tabsize=2,fontsize=\footnotesize}
\newminted[mycode]{text}{tabsize=2,fontsize=\footnotesize}

\newtcolorbox[auto counter,number within=section,
  list inside=mypyg]{mintedbox}[2][]{%
  title={Listing \thetcbcounter: #2},
  list entry={\numberline{\thetcbcounter}#2},
  enhanced,colframe=red!50!black,drop fuzzy shadow,#1}

\newenvironment{listingsbox}[3][]
 {%
   \def\listingsboxenvironment{#2}%save the environments
   \VerbatimEnvironment%
   \begin{mintedbox}[#1]{#3}%
     \begin{\listingsboxenvironment}}%
 {%
  \end{\listingsboxenvironment}%
  \end{mintedbox}%
}

\makeatletter
\crefname{tcb@cnt@mintedbox}{minted listing}{minted listings}
\Crefname{tcb@cnt@mintedbox}{Minted listing}{Minted listings}
\makeatother

\begin{document}

\section{Test}

\Cref{lst:agent:logstash:configuration} and \cref{lst:agent:logstash:configuration}.
\Cref{lst:agent:logstash:configuration,lst:test} and \cref{lst:agent:logstash:configuration,lst:test}.

\begin{listingsbox}[label={lst:agent:logstash:configuration}]{myshell}{A nice title}
[root@localhost ~]# vi /etc/sysconfig/network
\end{listingsbox}

\begin{listingsbox}[label={lst:test}]{myshell}{Something else}
[root@localhost ~]# vi /etc/sysconfig/something
\end{listingsbox}

\end{document}

在此处输入图片描述

通过检查输出控制台可以轻松获得类型;如果你在没有\crefname,\Crefname行的情况下处理我的代码,你会收到几个类似这样的警告:

LaTeX Warning: cref  reference format for label type `tcb@cnt@mintedbox' undefi
ned on input line 33.

并且消息显示了必须使用的类型\crefname

相关内容