我想制作一个 tcolorbox 栅格,其中一行中的每个框都具有相同的高度(简单)。但我还想使用键height from
来设置框的最小高度。但是一旦我这样做,我就会失去相等高度功能。有没有办法将两者结合起来?
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[many]{tcolorbox}
\begin{document}
\tcbset{enhanced,left=1cm}
\tcbset{marktext/.style={overlay={\node[rotate=90,text=black,anchor=north east] at (frame.north west){#1};}}}
\begin{tcbraster}[raster columns=3,raster equal height=rows]
\begin{tcolorbox}[marktext=shorter]
blbllb
\end{tcolorbox}
\begin{tcolorbox}[%height from=3cm to 30cm,
marktext=somelonger text]
blbllb\\blblb\\blblb\\blblb
\end{tcolorbox}
\begin{tcolorbox}[marktext=short]
blbllb
\end{tcolorbox}
\begin{tcolorbox}[marktext=x]
blbllb
\end{tcolorbox}
\end{tcbraster}
\end{document}
结果(行内高度相等但最小高度太小):
使用时的结果height from
(中间框足够大,但丢失了相同的高度):
答案1
使用minimum for equal height group
,可以给等高组赋予较低的最小高度。在栅格中,当前等高组的名称是自动生成的,也可以通过 设置raster equal height group
。
在我提出的解决方案中,我使用\tcb@ehgid
,即当前等高组的内部名称。minimum for equal height group
使用此名称和侧面文本的宽度加上一些额外空间来调用 :
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[many]{tcolorbox}
\begin{document}
\tcbset{enhanced,left=1cm}
\makeatletter
\tcbset{marktext/.style={%
overlay={\node[rotate=90,text=black,anchor=north east] at (frame.north west){#1};},
code={\setbox\z@=\color@hbox#1\color@endbox\tcbdimto\myheight{\wd\z@+3mm}},
minimum for equal height group=\tcb@ehgid:\myheight,
}}
\makeatother
\begin{tcbraster}[raster columns=3,raster equal height=rows]
\begin{tcolorbox}[marktext=shorter]
blbllb
\end{tcolorbox}
\makeatletter
\begin{tcolorbox}[marktext=somelonger text]
blbllb\\blblb\\blblb\\blblb
\end{tcolorbox}
\makeatother
\begin{tcolorbox}[marktext=short]
blbllb
\end{tcolorbox}
\begin{tcolorbox}[marktext=x]
blbllb
\end{tcolorbox}
\end{tcbraster}
\end{document}
得出:
请注意,如果没有设置等高组,则此调整marktext
将引发错误。
答案2
可能不是你想要的,但是为什么不直接使用某种描述的支柱呢?
\documentclass{article}
\usepackage[many]{tcolorbox}
\begin{document}
\tcbset{enhanced,left=1cm}
\tcbset{marktext/.style={overlay={\node[rotate=90,text=black,anchor=north east] at (frame.north west){#1};}}}
\begin{tcbraster}[raster columns=3,raster equal height=rows]
\begin{tcolorbox}[marktext=shorter]
blbllb
\end{tcolorbox}
\begin{tcolorbox}[%height from=3cm to 30cm,
marktext=somelonger text]
blbllb\\blblb\\blblb\\blblb\\
\rule{0pt}{3cm}
\end{tcolorbox}
\begin{tcolorbox}[marktext=short]
blbllb
\end{tcolorbox}
\begin{tcolorbox}[marktext=x]
blbllb
\end{tcolorbox}
\end{tcbraster}
\end{document}