\tcbset 在前言和正文中的行为不同

\tcbset 在前言和正文中的行为不同

我尝试使用禁用tcblistingtcolorbox环境(来自包)后自动开始新段落的功能。如果我将此代码放在文档主体中,那么我会得到所需的结果:tcolorbox\tcbset{after={\par\noindent}}

预期输出

但如果我将其放在序言中(我认为它应该在那儿),那么我得到的却是一些错误的信息:

意外的输出。

(该框似乎成为了上一行的一部分。)这个问题似乎不会发生在其他一些选项中,例如\tcbset{colback=yellow}在两个位置都给出相同的结果。

这是有意为之吗?如果是,如何after={\par\noindent}在序言中全局设置该选项?

用于意外输出的代码:

\documentclass[a4paper,10pt]{scrartcl}

\usepackage{tcolorbox}
\tcbset{after={\par\noindent}}

\begin{document}
%\tcbset{after={\par\noindent}}

Before the box.
\begin{tcolorbox}
  The box.
\end{tcolorbox}
After the box.

\end{document}

附言:我在本地机器和 Overleaf 上尝试使用不同的编译器(LuaLaTeX、XeLaTeX 和 pdfLaTeX)运行上述代码,每次都出现上述情况。

答案1

默认情况下,tcolorbox 使用autoparskip。此选项设置在文档的开头beforeafter键值对依赖于 的当前值\parskip

after如果您在序言中更改,则您正在禁用autoparskip。在这种情况下,您必须before自行设置。

\documentclass[a4paper,10pt]{scrartcl}

\usepackage{tcolorbox}
\tcbset{before={\par\pagebreak[0]\smallskip\parindent=0pt},after={\par\noindent}}

\begin{document}


Before the box.
\begin{tcolorbox}
  The box.
\end{tcolorbox}
After the box.

\end{document}

答案2

在序言中,使用\AtBeginDocument{\tcbset{after={\par\noindent}}}

\documentclass[a4paper,10pt]{scrartcl}

\usepackage{tcolorbox}
\AtBeginDocument{\tcbset{after={\par\noindent}}}

\begin{document}
%\tcbset{after={\par\noindent}}

Before the box.
\begin{tcolorbox}
  The box.
\end{tcolorbox}
After the box.

\end{document}

在此处输入图片描述

相关内容