我想用 定义一个tcolorbox
。auto counter
计数器的值将决定框的最终样式的某些部分。例如,假设框的背景在偶数框或奇数框之间在蓝色和红色之间交替。
有关于TiKZ
节点条件样式的几个问题和答案,但我不理解它们并且不知道如何应用tcolorbox
。
我知道我可以定义两种不同的样式并手动应用它们,就像下面的代码一样。但我更喜欢 LaTeX 为我完成这项工作。
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}
\newtcolorbox[auto counter]{oddbox}{
colback=red!20,
title=\thetcbcounter
}
\newtcolorbox[use counter from=oddbox]{evenbox}{
colback=blue!20,
title=\thetcbcounter
}
\begin{document}
\begin{oddbox}
\lipsum[2]
\end{oddbox}
\begin{evenbox}
\lipsum[2]
\end{evenbox}
\begin{oddbox}
\lipsum[2]
\end{oddbox}
\end{document}
答案1
有了这个新pgfkeys
钥匙
/utils/if odd={<num expr>}{<key lists if true>}{<key lists if false>}
您可以使用
/utils/if odd={\value{tcb@cnt@mybox}+1}{colback=red!20}{colback=blue!20}
以获得所需的效用。
当
<options>
在\newtcolorbox[...]{mybox}{<options>}
处理时\begin{mybox}
,柜台包装纸\tcbcounter
和\thetcbcounter
不是尚未更新或定义,内部计数器也未步进。这些操作均在处理后进行<options>
,见下文。因此,您必须tcb@cnt@mybox
直接使用内部计数器并手动将 1 加到其值上。\tcolorbox[#6,options@for=#3]
检查使用\__tcobox_new_tcolorbox:w
在tcolorbox.sty
v5.1.1中了解更多信息。此处的 styleoptions@for
保留<options>
了\newtcolorbox
。此处理顺序是 等键所必需的/tcb/void
,其作用是覆盖options@for
(通过options@for/.code=
)。关键路径前缀
/utils
在所有地方的使用范围更广泛pgfkeys
,并不是唯一的选择。例如,如果它由 定义
\tcbset{if odd/.code n args=...}
,那么您可以使用\newtcolorbox[...]{mybox}{if odd={}{}{}}
,但在非tcolorbox
地方您必须使用/tcb/if odd
才能访问它。
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{lipsum}
\makeatletter
\newtcolorbox[auto counter]{mybox}{
/utils/if odd={\value{tcb@cnt@mybox}+1}% no spaces in between the three args
{colback=red!20}{colback=blue!20},
title=\thetcbcounter
}
\pgfkeys{
/utils/if odd/.code n args={3}{%
\ifodd\numexpr#1\relax
\pgfkeysalso{#2}%
\else
\pgfkeysalso{#3}%
\fi
}
}
\begin{document}
\begin{mybox} \lipsum[2][1-2] \end{mybox}
\begin{mybox} \lipsum[2][1-2] \end{mybox}
\begin{mybox} \lipsum[2][1-2] \end{mybox}
\end{document}