我想增加一个计数器并更新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}
输出如下
。
观察\@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}