![为什么 \tcolorboxenvironment 设置了 savedelimiter 键?](https://linux22.com/image/472003/%E4%B8%BA%E4%BB%80%E4%B9%88%20%5Ctcolorboxenvironment%20%E8%AE%BE%E7%BD%AE%E4%BA%86%20savedelimiter%20%E9%94%AE%EF%BC%9F.png)
这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
?