在多色环境中紧密包装颜色盒

在多色环境中紧密包装颜色盒

对于一份处方,我想将几​​个(理想情况下是可分解的)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结果如下: 休息前行数增加

仅供参考:禁用breakable也不起作用: 不易破碎

有没有什么方法可以改善多色环境中 tcolorboxes 的打包(理想情况下是可破坏的)?

答案1

表格状

您遇到的问题是模数运算问题!您有一个固定高度的页面,并且想要在其中插入一组固定高度的框。有时您会得到很大的余数,无论您或多列如何努力,您都不会得到令人满意的结果。我不太确定您选择的多列包是否是最好的。这可以通过一些排版技巧来欺骗眼睛来解决。

如果您提供更多信息,例如 3-4 个区块的真实数据。我可能能够添加一些进一步的解决方案。

作为初学者,我根据您的方法提供了一个简单的解决方案。

  1. 将框架框放置在环路外面。

  2. 给背景添加颜色可能会给你的排版带来更好的效果。

  3. 现在,然后手动添加一些额外的跳过。

更好的方法是改变方法并从四个框开始表示列(像表格一样)。我会确保顶行始终包含一个部分或幻影部分,以便第一个框架框始终对齐。以某种方式构建它就像一个表格环境。

如果您提供更多真实数据,我可以想出解决方案。我最感兴趣的是框架框的深度是否不均匀。

\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}

相关内容