当 tcolorbox 位于 wrapfigure 内时,段落间距会出错

当 tcolorbox 位于 wrapfigure 内时,段落间距会出错

我有一个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(和)吗?parindenttcolorbox

答案1

请注意,您应该使用parskipKOMA 类的类选项,而不是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}

恢复跳过

相关内容