为什么一个 tcolorbox 之后的 \@afterheading 会禁用后面的 tcolorbox 的 before 选项?

为什么一个 tcolorbox 之后的 \@afterheading 会禁用后面的 tcolorbox 的 before 选项?

在以下 mwe 中,中的代码before={...}不起作用。我相信这与tcolorbox选项文档中的句子“此外,如果框紧跟标题,则不使用它...”有关before(版本 4.5.1 的第 81 页tcolorbox),但此处框没有立即地跟随标题。这是软件包中的错误还是我误解了什么?

\documentclass{article}

\usepackage{tcolorbox}

\begin{document}

\makeatletter
\begin{tcolorbox}[after={\@afterheading}]\end{tcolorbox}

abcd

\begin{tcolorbox}[before={test}]\end{tcolorbox}

\begin{tcolorbox}[before={test}]\end{tcolorbox}

\end{document}

答案1

代码after在组中,因此您的\@afterheading部分无效。\@nobreaktrue 由 LaTeX 全局执行,但\everypar应在下一段重置布尔值的设置随后丢失。 使用\aftergroup,或使用env/tcolorbox/after钩子代替after\AddToHookNext{env/tcolorbox/after}{\@afterheading}。 这需要当前的 LaTeX。

\documentclass{article}

\usepackage{tcolorbox}

\begin{document}

\makeatletter

\begin{tcolorbox}[after={\aftergroup\@afterheading}]\end{tcolorbox}

abcd 

\begin{tcolorbox}[before={test}]\end{tcolorbox}

\begin{tcolorbox}[before={test}]\end{tcolorbox}

\end{document}

在此处输入图片描述

相关内容