我想设置一个tcolorbox
第一段不缩进,但后续段落缩进。
我可以通过向框传递这样的选项来实现这一点:
before upper=\setlength{\parindent}{1em}\noindent
问题在于 会导致\noindent
TeX 进入水平模式。因此,如果我用应该处于垂直模式的东西(例如)启动框\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}
答案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
重置为空。