如何根据 tcbcounter 修复 tcolorbox 的样式?

如何根据 tcbcounter 修复 tcolorbox 的样式?

我想用 定义一个tcolorboxauto 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:wtcolorbox.styv5.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}

在此处输入图片描述

相关内容