平均能量损失

平均能量损失

我想设置一个tcolorbox第一段不缩进,但后续段落缩进。

我可以通过向框传递这样的选项来实现这一点:

before upper=\setlength{\parindent}{1em}\noindent

问题在于 会导致\noindentTeX 进入水平模式。因此,如果我用应该处于垂直模式的东西(例如)启动框\section,则会插入额外的垂直模式。

有没有一种方法可以让我自动获得我想要的输出而不需要创建两种不同类型的框?

平均能量损失

\documentclass{article}

\usepackage{tcolorbox}

\tcbset{mybox/.style={colback=white, colframe=blue, left=2mm, right=2mm,
  fonttitle=\bfseries}, fontupper=\small,
  before upper=\setlength{\parindent}{1em}\noindent}

\newtcolorbox{mybox}[1][]{mybox,#1}

\begin{document}

\begin{mybox}
  The first paragraph should not have an indent.

  Subsequent paragraphs should be indented.
\end{mybox}

\begin{mybox}
  \section{Should not have gap above this heading}
\end{mybox}

\begin{mybox}[before upper=\setlength{\parindent}{1em}]
  \section{Previous box should look like this}
\end{mybox}

\end{document}

MWE 输出

答案1

您可以使用简化版本\@afterheading

\documentclass{article}

\usepackage{tcolorbox}

\tcbset{mybox/.style={colback=white, colframe=blue, left=2mm, right=2mm,
  fonttitle=\bfseries}, fontupper=\small,
  before upper=\setlength{\parindent}{1em}\everypar{{\setbox0\lastbox}\everypar{}},
}

\newtcolorbox{mybox}[1][]{mybox,#1}

\begin{document}

\begin{mybox}
  The first paragraph should not have an indent.

  Subsequent paragraphs should be indented.
\end{mybox}

\begin{mybox}
  \section{Should not have gap above this heading}
\end{mybox}

\begin{mybox}[before upper=\setlength{\parindent}{1em}]
  \section{Previous box should look like this}
\end{mybox}

\end{document}

在此处输入图片描述

中的标记\everypar在段落开始后插入,因此就在缩进框之后;{\setbox0\lastbox}缩进框被移除并放入框 0,然后将其重置为原来的状态,因为分配发生在组中。然后\everypar重置为空。

相关内容