小页面和 MD 框架框的总高度

小页面和 MD 框架框的总高度

我想在多列环境中使用任意数量的 mdframed 框。每列应具有相同的高度,这意味着每列中最后一个框的末端应匹配(见下图)。

在我的具体示例中,我想在 3 列多列环境中放置 5 个 mdframed 框。我尝试按照建议使用 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 个嵌套的 minipage。内部 minipage 为整个列高,然后您在其周围添加一个框架,这实际上会强制外部 minipage 大于列高。如果这些只是\fboxes,则需要从内部 minipage 的高度中减去2\fboxsep和。2\fboxrule

但在 中mdframed,我按照以下方式进行操作。我在序言中定义了这些:

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

然后,对于第三列的内部小页面,

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

这样,框架边框和宽度就被减去了,所以你不会溢出。请注意,calc我的语法需要包。

\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.8pt 是有效的,即使列高更改为各种值:

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

相关内容