对于一份处方,我想将几个(理想情况下是可分解的)tcolorbox 放在多色环境中。以下代码是我已经做过的一个非常基本的示例:
\documentclass[landscape, parskip=half]{scrartcl}
\usepackage[hmargin=1cm, vmargin=1cm]{geometry}
\usepackage{showframe}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
\tcbuselibrary{skins}
\tcbset{
breakable, % << comment for a different weird behaviour
% lines before break=5, % << the warning message suggests to increase this value
frame empty,
blank,
left=3mm, right=3mm,
borderline vertical={1pt}{0pt}{black},
colbacktitle={black!20},
coltitle=black,
}
\newtcolorbox[use counter*=subsection]{block}[1][]{before title={\thetcbcounter:~},#1}
% for testing
\usepackage{blindtext}
\NewDocumentCommand{\testbox}{m}{
\foreach \i in {0,...,#1}{
\begin{block}[title=This is a test-box]
\par
\framebox(\linewidth,1cm){foo}
\framebox(\linewidth,2cm){foo}
\framebox(\linewidth,1.3cm){foo}
\end{block}
}
}
\usepackage{multicol}
\title{Box-Packing}
\begin{document}
\begin{multicols*}{4}
\maketitle
\section{Foo}
\testbox{4}
\section{Bar}
\testbox{3}
\section{Baz}
\testbox{2}
\end{multicols*}
\end{document}
不幸的是,我得到了一些奇怪的列平衡(大部分是直接在某一节之后)
按照警告中的建议并增加,lines before break
结果如下:
有没有什么方法可以改善多色环境中 tcolorboxes 的打包(理想情况下是可破坏的)?
答案1
您遇到的问题是模数运算问题!您有一个固定高度的页面,并且想要在其中插入一组固定高度的框。有时您会得到很大的余数,无论您或多列如何努力,您都不会得到令人满意的结果。我不太确定您选择的多列包是否是最好的。这可以通过一些排版技巧来欺骗眼睛来解决。
如果您提供更多信息,例如 3-4 个区块的真实数据。我可能能够添加一些进一步的解决方案。
作为初学者,我根据您的方法提供了一个简单的解决方案。
将框架框放置在环路外面。
给背景添加颜色可能会给你的排版带来更好的效果。
现在,然后手动添加一些额外的跳过。
更好的方法是改变方法并从四个框开始表示列(像表格一样)。我会确保顶行始终包含一个部分或幻影部分,以便第一个框架框始终对齐。以某种方式构建它就像一个表格环境。
如果您提供更多真实数据,我可以想出解决方案。我最感兴趣的是框架框的深度是否不均匀。
\documentclass[landscape, parskip=half]{article}
\usepackage[hmargin=1cm, vmargin=1cm]{geometry}
%\usepackage{showframe}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
\tcbuselibrary{skins}
\tcbset{
%breakable, % << comment for a different weird behaviour
% lines before break=5, % << the warning message suggests to increase this value
frame empty,
blank,
left=3mm, right=3mm,
borderline vertical={1pt}{0pt}{black},
colbacktitle={black!20},
coltitle=black,
}
\usepackage{multicol}
\newtcolorbox[use counter*=subsection]{block}[1][]{before title={\thetcbcounter:~},#1}
% for testing
\usepackage{blindtext}
\parindent0pt
\NewDocumentCommand{\testbox}{m}{
\begin{block}[title=This is a test-box]
\end{block}
\foreach \i in {0,...,#1}{%
\hbox to \linewidth{\hfill\framebox(0.9\linewidth,1cm){foo}\hfill}
\vskip1.5pt plus0.3pt minus 0.3pt
}
\vskip1.5pt plus0.3pt minus 0.3pt
}
\ExplSyntaxOn
\clist_new:N \formulary_clist
\clist_gset:Nn \formulary_clist {foo, bar, drug 1, drug 2, drug 3}
\ExplSyntaxOff
\title{Box-Packing}
\pagecolor{yellow}
\begin{document}
\begin{multicols*}{4}
%\maketitle
\section{One}
\testbox{4}
\section{Two}
\testbox{3}
\section{Three}
\testbox{2}
\section{Four}
\testbox{4}
\section{Five}
\testbox{3}
\testbox{3}
\section{Six}
\testbox{3}
\testbox{4}
\section{Seven}
\testbox{2}
\vskip2cm
\section{Eight}
\testbox{4}
\section{Ten}
\testbox{3}
\section{Eleven}
\testbox{2}
%\vfill\vfill
\end{multicols*}
\end{document}