我有一个tcolorbox
单独使用的环境,有时在 内使用wrapfigure
。单独使用时,它运行完美 - 段落根据我的文档的parskip
和进行间隔parindent
。但是,wrapfigure
这些设置似乎被忽略了。
以下是 MWE:
% !TEX program = xelatex
\documentclass{scrbook}
\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{tcolorbox}
\setlength{\parskip}{3mm}
\setlength{\parindent}{0pt}
\newtcolorbox[auto counter]{sidebar}[2][]{
parbox=false, % normal paragraph spacing (unless wrapped!)
sharp corners,
colframe=black,
colback=black!15!white,
title=#2,
#1
}
\begin{document}
\begin{sidebar}{Test without wrapping}
Paragraph 1.
Paragraph 2.
\end{sidebar}
\begin{wrapfigure}{r}{0.5\linewidth}
\begin{sidebar}{Test with wrapping and no explicit parksip}
Paragraph 1.
Paragraph 2.
\end{sidebar}
\end{wrapfigure}
\begin{wrapfigure}{r}{0.5\linewidth}
\begin{sidebar}{Test with wrapping and explicit parskip}
\setlength{\parskip}{3mm}\setlength{\parindent}{0pt}Paragraph 1.
Paragraph 2.
\end{sidebar}
\end{wrapfigure}
\end{document}
输出如下:
有什么方法可以避免在包装内明确指定parskip
(和)吗?parindent
tcolorbox
答案1
请注意,您应该使用parskip
KOMA 类的类选项,而不是parskip
手动设置尺寸(更糟糕的是)。如果默认值parskip
不合适,请参阅 KOMA 的文档以了解您可以将其设置为的各种值。
您可以使用库恢复所需的跳过hooks
。例如,
\documentclass[parskip]{scrbook}
\usepackage{wrapfig}
\usepackage{graphicx}
\usepackage{tcolorbox}
\tcbuselibrary{hooks}
\usepackage{kantlipsum}
\newlength\myskip
\AtBeginDocument{%
\setlength\myskip{\parskip}%
}
\newtcolorbox[auto counter]{sidebar}[2][]{
parbox=false, % normal paragraph spacing (unless wrapped!)
sharp corners,
colframe=black,
colback=black!15!white,
before upper app={\par\parskip=\myskip},
title=#2,
#1
}
\begin{document}
\begin{sidebar}{Test without wrapping}
Paragraph 1.
Paragraph 2.
\end{sidebar}
\begin{wrapfigure}{r}{0.5\linewidth}
\begin{sidebar}{Test with wrapping and no explicit parksip}
Paragraph 1.
Paragraph 2.
\end{sidebar}
\end{wrapfigure}
\kant[1]
\begin{wrapfigure}{r}{0.5\linewidth}
\begin{sidebar}{Test with wrapping and explicit parskip}
\setlength{\parskip}{3mm}\setlength{\parindent}{0pt}Paragraph 1.
Paragraph 2.
\end{sidebar}
\end{wrapfigure}
\kant[2]
\end{document}