感谢 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
。