![tcolorbox 使用 parbox=false 时溢出文本](https://linux22.com/image/451661/tcolorbox%20%E4%BD%BF%E7%94%A8%20parbox%3Dfalse%20%E6%97%B6%E6%BA%A2%E5%87%BA%E6%96%87%E6%9C%AC.png)
我遇到一个问题,当我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 的内容。这就是为什么我想将选项设置parbox
为false
。
答案1
通过使用,可以为此使用parbox=false
定制的。\@parboxrestore
tcolorbox
% 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
。作为一种解决方法,您可以将它们放在字体选项中,如fontupper
和fontlower
。
\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}