附图raster
由tcolorbox
使用了选项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 columns
2 (参见库‘栅格’在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}