tcolorbox 选项中的 refstepcounter

tcolorbox 选项中的 refstepcounter

我想增加一个计数器并更新phantom键中的当前标签tcolorbox环境,但它不起作用,如下例所示:

\documentclass{article}
\usepackage[paperwidth=6cm,paperheight=6cm,margin=4mm]{geometry}
\usepackage{tcolorbox}

\makeatletter
\newcommand\currentlabel{\@currentlabel}
\makeatother

\begin{document}

\newcounter{mycounter}

\begin{tcolorbox}[phantom=\refstepcounter{mycounter}]
  counter value: \themycounter\ \currentlabel.
\end{tcolorbox}

\begin{tcolorbox}[phantom=\refstepcounter{mycounter}]
  counter value: \themycounter\ \currentlabel.
\end{tcolorbox}

\refstepcounter{mycounter}
\begin{tcolorbox}
  counter value: \themycounter\ \currentlabel.
\end{tcolorbox}

\refstepcounter{mycounter}
\begin{tcolorbox}
  counter value: \themycounter\ \currentlabel.
\end{tcolorbox}

\end{document}

输出如下

mwe 的输出

观察\@currentlabel当使用密钥增加计数器时,其不会更新phantom

这是一个错误还是我遗漏了什么?

答案1

我还没有深入研究内部原理,但它看起来像是tcolorbox保留了 的值\@currentlabel,以便它具有与 开始之前相同的值tcolorbox。另一方面,它会增加计数器,并且允许您使用参数为其分配标签label。如果您使用:

\begin{tcolorbox}[step=mycounter,label=one]
  Counter value: \themycounter, \currentlabel.
  This is \ref{one}
\end{tcolorbox}

那么输出是:

在此处输入图片描述

也就是说,label=正确使用会设置对计数器的引用。后台tcolorbox可能正在将标签直接写入辅助文件。(请注意,这step=...是 的快捷方式phantom=\refstepcounter...)。因此引用工作正常,但要访问它,您需要使用label=...

答案2

安德鲁已经提供了解决方案,我只是想表明,这种变化在代码 \@currentlabel之外无法存在。phantom

第三个框的双重\refstepcounter命令是故意做的!

\documentclass{article}
\usepackage[paperwidth=6cm,paperheight=6cm,margin=4mm]{geometry}
\usepackage{tcolorbox}

\makeatletter
\newcommand\currentlabel{\@currentlabel}
\makeatother

\begin{document}

\newcounter{mycounter}

\begin{tcolorbox}
  \refstepcounter{mycounter}%
  counter value: \themycounter\ \currentlabel.
\end{tcolorbox}

\begin{tcolorbox}[phantom={\global\refstepcounter{mycounter}}]
  counter value: \themycounter\ \ref{Box::two}% Should not work
\end{tcolorbox} 


\refstepcounter{mycounter}
\begin{tcolorbox}
  \refstepcounter{mycounter}
  counter value: \themycounter\ \ref{Box::three}%
\end{tcolorbox} \label{Box::three}%

\refstepcounter{mycounter}
\begin{tcolorbox}
  counter value: \themycounter\ \currentlabel.
\end{tcolorbox}

\end{document}

在此处输入图片描述

相关内容