Общая высота мини-страниц и коробок с рамкой из МДФ

Общая высота мини-страниц и коробок с рамкой из МДФ

Я хочу использовать произвольное количество mdframed-боксов в многоколоночной среде. Каждый столбец должен иметь одинаковую высоту, что означает, что концы последнего блока в каждом столбце должны совпадать (см. рисунок ниже).

В моем конкретном примере я хочу разместить 5 mdframed boxs в 3-колоночной multicols среде. Я попытался отрегулировать высоту boxs, используя minipages, как было предложеноздесь.

Вот полный пример кода:

\documentclass{article}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{multicol}

\newlength{\columnheight}
\setlength{\columnheight}{10cm}

\begin{document}
\centering
\begin{multicols}{3}
% First Column
\begin{minipage}[t][\columnheight][t]{0.9\linewidth}
  \begin{mdframed}
    \begin{minipage}[t][0.6\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
            \item Point 2
        \item Point 3
      \end{itemize}
    \end{minipage}
  \end{mdframed}
  \vfill
  \begin{mdframed}
    \begin{minipage}[t][0.2\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
      \end{itemize}
    \end{minipage}
  \end{mdframed}
\end{minipage}
\columnbreak
% Second Column
\begin{minipage}[t][\columnheight][t]{0.9\linewidth}
  \begin{mdframed}
    \begin{minipage}[t][0.4\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
        \item Point 2
      \end{itemize}
    \end{minipage}
  \end{mdframed}
  \vfill
  \begin{mdframed}
    \begin{minipage}[t][0.4\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
        \item Point 2
      \end{itemize}
    \end{minipage}
  \end{mdframed}
\end{minipage}
\columnbreak
% Third Column
\begin{minipage}[t][\columnheight][t]{0.9\linewidth}
  \begin{mdframed}
    \begin{minipage}[t][\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
      \end{itemize}
    \end{minipage}
  \end{mdframed}
  \vfill
\end{minipage}
\columnbreak
\end{multicols}

\end{document}

Результат выглядит следующим образом:

Результат

Как вы можете видеть на рисунке, правый столбец больше остальных. Есть ли способ решить эту проблему автоматически? До сих пор я использовал vspaces для регулировки отступа между блоками в двух других столбцах, пока их длины не совпадут. Есть ли более элегантный способ сделать это? Я уже пробовал регулировать такие значения, как skipbelow или skipabove для блоков, но это не помогает.

решение1

В 3-м столбце вы используете 2 вложенные мини-страницы. Внутренняя — полная высота столбца, а затем вы добавляете вокруг нее рамку, которая фактически заставляет внешнюю мини-страницу быть больше высоты столбца. Если бы это были просто \fboxes, нужно было бы вычесть 2\fboxsepи 2\fboxruleиз высоты внутренней мини-страницы.

Но в mdframed, я сделал это следующим образом. Я определил их в преамбуле:

\newlength\innermarg
\innermarg 4pt\relax
\newlength\outerlinewidth
\outerlinewidth 3pt\relax
\mdfsetup{outerlinewidth=\outerlinewidth, innertopmargin=\innermarg, 
  innerbottommargin=\innermarg, outermargin=0pt}

Затем, для внутренней мини-страницы 3-го столбца,

\begin{minipage}[t][\columnheight-2\outerlinewidth-2\innermarg][t]{0.9\linewidth}

Таким образом, граница и ширина рамки вычитаются, так что переполнения не будет. Обратите внимание, что calcдля моего синтаксиса требуется package.

\documentclass{article}
\usepackage[framemethod=TikZ]{mdframed}
\usepackage{multicol}
\usepackage{calc}
\newlength{\columnheight}
\setlength{\columnheight}{10cm}
\newlength\innermarg
\innermarg 4pt\relax
\newlength\outerlinewidth
\outerlinewidth 3pt\relax
\mdfsetup{outerlinewidth=\outerlinewidth, innertopmargin=\innermarg, 
  innerbottommargin=\innermarg, outermargin=0pt}
\begin{document}
\centering
\begin{multicols}{3}
% First Column
\begin{minipage}[t][\columnheight][t]{0.9\linewidth}
  \begin{mdframed}
    \begin{minipage}[t][0.6\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
            \item Point 2
        \item Point 3
      \end{itemize}
    \end{minipage}
  \end{mdframed}
  \vfill
  \begin{mdframed}
    \begin{minipage}[t][0.2\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
      \end{itemize}
    \end{minipage}
  \end{mdframed}
\end{minipage}
\columnbreak
% Second Column
\begin{minipage}[t][\columnheight][t]{0.9\linewidth}
  \begin{mdframed}
    \begin{minipage}[t][0.4\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
        \item Point 2
      \end{itemize}
    \end{minipage}
  \end{mdframed}
  \vfill
  \begin{mdframed}
    \begin{minipage}[t][0.4\columnheight][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
        \item Point 2
      \end{itemize}
    \end{minipage}
  \end{mdframed}
\end{minipage}
\columnbreak
% Third Column
\begin{minipage}[t][\columnheight][t]{0.9\linewidth}
  \begin{mdframed}
    \begin{minipage}[t][\columnheight-2\outerlinewidth-2\innermarg][t]{0.9\linewidth}
      \begin{itemize}
        \item Point 1
      \end{itemize}
    \end{minipage}
  \end{mdframed}
%  \vfill
\end{minipage}
\columnbreak
\end{multicols}

\end{document}

введите описание изображения здесь

Примечание: все еще, кажется, есть очень небольшое расхождение в высоте последнего столбца. У меня нет времени отслеживать это, но я обнаружил, что вычитание дополнительных 0,8 пункта из высоты столбца 3-го столбца работает, даже когда высота столбца изменяется на различные значения:

\begin{minipage}[t][\columnheight-2\outerlinewidth-2\innermarg-.8pt][t]{0.9\linewidth}

Связанный контент