tcolorbox 使用 parbox=false 时溢出文本

tcolorbox 使用 parbox=false 时溢出文本

我遇到一个问题,当我parbox=false向 tcolorbox 添加选项时,框内的文本无法正确拆分。您知道问题可能出在哪里吗?

以下是代码:

\documentclass{tufte-book}
\usepackage[utf8]{inputenc}

\usepackage{blindtext}

\usepackage{amsmath}
\usepackage{cleveref}
\usepackage[most]{tcolorbox}
\usepackage[parfill]{parskip}

\newtheorem{thm}{Theorem}[chapter]

%--------Examples-------------
\newtcbtheorem
  [use counter*=thm,number within=chapter,crefname={example}{examples},Crefname={Example}{Examples}]%
  {ex}
  {Example}
  {%
    before skip=10pt,after skip=10pt,
    left=0.2cm,right=0.2cm,top=0cm,
    toptitle=0.2cm,bottomtitle=0cm,
    breakable,
    toprule at break=0.2cm,
    sharp corners,
    colback=blue!10,
    coltitle=black,
    colframe=blue!10,
    fonttitle=\bfseries,
    parbox=false,
  }% options
  {ex}% prefix

\begin{document}

\begin{ex}{Test}{}
\Blindtext
\end{ex}

\end{document}

我正在使用该parskip包,并希望它也应用于 tcolorbox 的内容。这就是为什么我想将选项设置parboxfalse

parbox=falseparbox=false

没有parbox=false没有 parbox=false

答案1

通过使用,可以为此使用parbox=false定制的。\@parboxrestoretcolorbox

% default definition in latex2e kernel
% $ latexdef -s \@arrayparboxrestore
% latex.ltx, line 11974:
\def\@arrayparboxrestore{%
  \let\if@nobreak\iffalse
  \let\if@noskipsec\iffalse
  \let\par\@@par
  \let\-\@dischyph
  \let\'\@acci\let\`\@accii\let\=\@acciii
  \parindent\z@ \parskip\z@skip
  \everypar{}%
  \linewidth\hsize
  \@totalleftmargin\z@
  \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip
  \parfillskip\@flushglue
  \lineskip\normallineskip
  \lineskiplimit\normallineskiplimit
  \baselineskip\normalbaselineskip
  \sloppy}

% customized one
% tcolorbox.sty
\def\tcb@parbox@false@settings{%
  \linewidth\hsize%
  \@totalleftmargin\z@%
  \leftskip\z@skip%
  \rightskip\z@skip%
  \@rightskip\z@skip%
}

\def\tcb@parbox@use@false{%
  \def\@parboxrestore{%
    \tcb@parbox@false@settings%
    \let\@parboxrestore=\tcb@parboxrestore%
    }%
}

在所有这些差异中,与 OP 案例相关的差异是\sloppy(以及由类引入的不规则文本设置tutfe-book),其定义为

% $ latexdef -s \sloppy
% latex.ltx, line 13894:
\DeclareRobustCommand\sloppy{%
  \tolerance 9999%
  \emergencystretch 3em%
  \hfuzz .5\p@
  \vfuzz\hfuzz}

因此插入\sopply是一种直接的解决方案。为了获得更好的结果,并且由于tutfe-book类已加载并配置了ragged2e包,\justifying因此会有所帮助。

至于将这些命令传递到哪里,最好的选择是一些halign=<arbitrary alignment code>尚未支持的选项tcolorbox。作为一种解决方法,您可以将它们放在字体选项中,如fontupperfontlower

\documentclass{tufte-book}
\usepackage{lipsum}
\usepackage{tcolorbox}

\begin{document}
\newcommand\test[1]{
  \begin{tcolorbox}[title=\texttt{\detokenize{#1}}, #1]
    \lipsum[2][1-6]
  \end{tcolorbox}
}

Base case
\test{parbox=true}
\test{parbox=false}

Simulate \verb|parbox=true|
\test{parbox=false, fontupper=\sloppy}

Try better
\test{parbox=false, fontupper=\justifying}
\end{document}

在此处输入图片描述

相关内容