Tcolorbox parbox=false 選項會依高度填滿選項中斷

Tcolorbox parbox=false 選項會依高度填滿選項中斷

Tcolorbox選項按選項parbox=false中斷height fill

\documentclass[]{article}
\usepackage[most, many]{tcolorbox}
\usepackage{lipsum}

\begin{document}

\begin{tcolorbox}[
parbox=false, 
height fill % this option breaks parbox=false option
]
\lipsum[1-3]
\end{tcolorbox}

\end{document}

在此輸入影像描述

答案1

通常,a 的內容tcolorbox會被處理到一個或多個內部框暫存器。然後,用適當的繪圖程式碼等對這個框/這些框進行排版。

對於height fill,也有一些例外。特別是,before在處理內容之前執行程式碼。不幸的是,這可能會產生副作用。在這裡,一些設置來自before沖孔。

透過補丁,可以修復當前範例:

\documentclass[]{article}
\usepackage[most, many]{tcolorbox}
\usepackage{lipsum}

\makeatletter
\tcbset{
  parskip/.style={before={\ifnum\lastnodetype=-1\relax\else\par%
      \ifvmode\edef\tcb@prevdepth{\the\glueexpr\prevdepth+\lineskip+\parskip}%
      \def\tcb@undo@before{\addvspace{-\glueexpr\tcb@prevdepth}}%
      \pagebreak[0]\fi\fi\noindent},
    after={\tcb@parfillskip@check\par}},
  noparskip/.style={before={\ifnum\lastnodetype=-1\relax\else\par%
      \ifvmode\edef\tcb@prevdepth{\the\glueexpr\prevdepth+\lineskip}%
      \def\tcb@undo@before{\addvspace{-\glueexpr\smallskipamount+\tcb@prevdepth}}%
      \pagebreak[0]\smallskip\fi\fi\noindent},
    after={\tcb@parfillskip@check\par\smallskip}},
}
\makeatother

\begin{document}

\begin{tcolorbox}[
parbox=false,
height fill
]
\lipsum[1-3]
\end{tcolorbox}

\end{document}

tcolorbox如果沒有新的情況出現,我會將此補丁新增到下一個版本。

相關內容