为什么 \tcolorboxenvironment 设置了 savedelimiter 键?

为什么 \tcolorboxenvironment 设置了 savedelimiter 键?

tcolorbox命令\tcolorboxenvironment{<envname>}{<keys>}定义为

\newcommand{\tcolorboxenvironment}[2]{%
  \AddToHook{env/#1/before}{%
    \begin{tcolorbox}[{savedelimiter={#1},#2,wrap@environment,%
      code={\def\tcb@end@tcolorboxenvironment{\end{tcolorbox}}}}]%
  }%
  \AddToHook{env/#1/after}{%
    \tcb@end@tcolorboxenvironment%
  }%
}

因此它将savedelimiter密钥设置为<envname>。为什么这样做呢?

在代码中,我只看到两个地方使用它:在 中\tcblower,以及在 中\tcb@addcontentsline用于 tcolorboxes 列表。savedelimiter文档中给出的用例是使用tcolorbox可以对下框执行操作的环境定义一个新环境:

\documentclass{article}

\usepackage{tcolorbox}

\newenvironment{mybox}[1]{%
\tcolorbox[savedelimiter=mybox,
savelowerto=\jobname_bspsave2.tex,lowerbox=ignored,
colback=red!5!white,colframe=red!75!black,fonttitle=\bfseries,
title={#1}]}%
{\endtcolorbox}

\begin{document}

\begin{mybox}{My Example}
Upper part.
\tcblower
Saved lower part!
\end{mybox}
Now, the saved part is used:
\begin{tcolorbox}[colback=green!5]
\input{\jobname_bspsave2.tex}
\end{tcolorbox}

\end{document}

但我不认为这可以工作,\tcolorboxenvironment因为它包装了<envname>tcolorbox所以如果你试图抓住\tcblower,例如,它会出错,因为它也在抓住\end{<envname>}。事实上,这是错误的:

\documentclass{article}

\usepackage{tcolorbox}

\begin{document}

\tcolorboxenvironment{quote}{}

\begin{quote}
upper
\tcblower
lower
\end{quote}

\end{document}

我也不明白如何\tcolorboxenvironment使用,\tcblistof因为后者需要一个相应的list inside键,该键只能在内置的\newtcolorbox-type 命令之一中调用。

我是否忽略了这里的用途savedelimiter,或者在的定义中它实际上是不必要的\tcolorboxenvironment

相关内容