我想为 tcolorbox 的下半部分使用环境,而不仅仅是tcblower
命令。我尝试使用以下代码,但失败了。
\documentclass{article}
\usepackage{tcolorbox}
\newenvironment{lowerpart}{\tcblower}{}
\begin{document}
% This works
\begin{tcolorbox}
Upper part
\tcblower
Lower part
\end{tcolorbox}
% This fails
\begin{tcolorbox}
Upper part
\begin{lowerpart}
Lower part
\end{lowerpart}
\end{tcolorbox}
\end{document}
显示的错误是
! Extra }, or forgotten \endgroup.
\endminipage ...pagefalse \color@endgroup \egroup
\expandafter \@iiiparbox \...
l.16 \begin{lowerpart}
这个问题可能与 tcolorbox 中的 savelowerto 选项在包装器命令中失败。但由于问题不一样,我不知道相同的解决方案是否适用于此处,也不知道如何应用于我的代码。
答案1
正如 egreg 已经评论过的,问题的核心是群体层面。\tcblower
关闭一个群体/环境(简称:上部minipage
)并打开另一个群体/环境(简称:minipage
下部)。
得益于etoolbox
自动加载的包tcolorbox
,您可以\tcblower
在环境真正启动之前很早就放入lowerpart
:
\documentclass{article}
\usepackage{tcolorbox}
\newenvironment{lowerpart}{}{}
\BeforeBeginEnvironment{lowerpart}{\tcblower}
\begin{document}
% This works
\begin{tcolorbox}
Upper part
\tcblower
Lower part
\end{tcolorbox}
% This works too
\begin{tcolorbox}
Upper part
\begin{lowerpart}
Lower part
\end{lowerpart}
\end{tcolorbox}
\end{document}
但是,我不会冒险将这种新环境与诸如此类lowerpart
的棘手事物结合起来。savelowerto
而不是使用真实的下部,也许,只需用 画一条线\tcbline
就可以了。这可以不用技巧来使用:
\documentclass{article}
\usepackage[skins]{tcolorbox}
\newenvironment{lowerpart}{\tcbline}{}
\begin{document}
% This works
\begin{tcolorbox}
Upper part
\tcblower
Lower part
\end{tcolorbox}
% This works too
\begin{tcolorbox}
Upper part
\begin{lowerpart}
Lower part
\end{lowerpart}
\end{tcolorbox}
\end{document}