通过均匀调整 tcolorbox 高度来填充垂直空白

通过均匀调整 tcolorbox 高度来填充垂直空白

附图rastertcolorbox使用了选项raster equal height=rows,但是由于右栏框的内容太大,导致左栏和右栏的高度不一致(见附图),也就是说,虽然 选项raster equal height=rows可以正常工作——左侧框的高度与右侧框的高度相等——但是会产生不必要的空白。

我的问题是:如何自动均匀地调整左列中框的高度以获得视觉上相等的高度。

梅威瑟:

\documentclass[a4paper,12pt]{article}

\usepackage[most]{tcolorbox}
\tcbuselibrary{raster}

\begin{document}
\begin{tcbitemize}[raster equal height=rows,
raster every box/.style={colframe=red!50!black,colback=red!10!white}]
\tcbitem[blankest]
\begin{tcbitemize}[raster columns=1,raster row skip=0pt]
\tcbitem One
\tcbitem Two
\end{tcbitemize}
\tcbitem \huge tcbitemize\\tcbitem\\tcbitemize
\end{tcbitemize}
\end{document}

在此处输入图片描述

答案1

我建议/tcb/add to natural height在可能需要增长的子项目中使用。使用此键,可以传递要分配给每个子项目的多余高度,作为从由定义的宏计算的长度/tcb/space to第一个中使用的键定义的宏计算的长度\tcbitem/tcb/space to从要求的高度中减去框的自然高度,并将结果存储在其名称在参数中传递的宏中)。使用此方法,您需要在中写入可能需要增长以匹配空间要求的项目数量一个地方。两个项目的示例:

code={\setlength{\mylen}{\dimexpr \myspace/2}}

此解决方案的主要优点是不需要对任何高度进行硬编码。右列可能比左列高或短,这不会造成任何问题:最短列中的框会自动适应较高列的高度。

多次编译运行是收敛所必需的(似乎三次编译运行通常就足够了)。

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{raster, skins}

\newlength{\mylen}

\begin{document}

\begin{tcbitemize}[raster equal height=rows,
                   raster every box/.style={colframe=red!50!black,
                                            colback=red!10!white}]
  \tcbitem[blankest, space to=\myspace,
           code={\setlength{\mylen}{\dimexpr \myspace/2}}]
  \begin{tcbitemize}[
    raster columns=1, raster row skip=0pt,
    raster every box/.append style={add to natural height=\mylen}]
    \tcbitem One
    \tcbitem Two
  \end{tcbitemize}
  \tcbitem \huge tcbitemize\\ tcbitem\\ tcbitemize
\end{tcbitemize}

\end{document}

截屏

显示如何自动将左列框的内容居中(水平和垂直)的变体:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{raster, skins}
\usepackage{lipsum}

\newlength{\mylen}

\begin{document}

\begin{tcbitemize}[raster equal height=rows,
                   raster every box/.style={colframe=red!50!black,
                                            colback=red!10!white}]
  \tcbitem[blankest, space to=\myspace,
           code={\setlength{\mylen}{\dimexpr \myspace/2}}]
  \begin{tcbitemize}[
    raster columns=1, raster row skip=0pt,
    raster every box/.append style={halign=center, valign=center,
                                    add to natural height=\mylen}]
    \tcbitem One
    \tcbitem Two
  \end{tcbitemize}
  \tcbitem \lipsum[1]
\end{tcbitemize}

\end{document}

截屏

当左侧堆叠的物品(总和)高于第二列中盒子的自然高度时,会发生什么情况:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{raster, skins}

\newlength{\mylen}

\begin{document}

\begin{tcbitemize}[raster equal height=rows,
                   raster every box/.style={colframe=red!50!black,
                                            colback=red!10!white}]
  \tcbitem[blankest, space to=\myspace,
           code={\setlength{\mylen}{\dimexpr \myspace/2}}]
  \begin{tcbitemize}[
    raster columns=1, raster row skip=0pt,
    raster every box/.append style={add to natural height=\mylen}]
    \tcbitem One
    \tcbitem Two
  \end{tcbitemize}
  \tcbitem Foo bar.
\end{tcbitemize}

\end{document}

截屏

最后,左栏中有三项(当然,可以使用任意数字):

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{raster, skins}
\usepackage{lipsum}

\newlength{\mylen}

\begin{document}

\begin{tcbitemize}[raster equal height=rows,
                   raster every box/.style={colframe=red!50!black,
                                            colback=red!10!white}]
  \tcbitem[blankest, space to=\myspace,
           code={\setlength{\mylen}{\dimexpr \myspace/3}}]
  \begin{tcbitemize}[
    raster columns=1, raster row skip=0pt,
    raster every box/.append style={add to natural height=\mylen}]
    \tcbitem One
    \tcbitem Two
    \tcbitem Three
  \end{tcbitemize}
  \tcbitem \lipsum[1]
\end{tcbitemize}

\end{document}

截屏

注意:可能不是每个人都能看出来,外部tcbitemize每个例子中外部有两列的原因是初始值/tcb/raster columns2 (参见库‘栅格’tcolorbox手册中)。 这个初始值在 OP 的示例代码中隐式使用,并且我在上面的所有示例中都保留了它。

答案2

像这样?你可以使用 调整框高度raster height=0.075\textheight

\documentclass[a4paper,12pt]{article}
\usepackage[most]{tcolorbox}
\tcbuselibrary{raster}

\begin{document}
\begin{tcbitemize}[raster columns=2, raster equal height,raster height=0.075\textheight,
raster every box/.style={colframe=red!50!black,colback=red!10!white}]
\tcbitem[raster multirow=4, blankest]
\begin{tcbitemize}[raster columns=1, raster rows=1]
\tcbitem One 
\tcbitem Two
\end{tcbitemize}
\tcbitem[enhanced,raster multicolumn=1, raster multirow=4] \huge tcbitemize\\tcbitem\\tcbitemize
\end{tcbitemize}
\end{document}

在此处输入图片描述

相关内容