ミニページと MD フレーム ボックスの合計高さ

ミニページと MD フレーム ボックスの合計高さ

マルチコル環境で任意の数の mdframed ボックスを使用したいと考えています。各列の高さは同じである必要があります。つまり、各列の最後のボックスの端が一致している必要があります (下の図を参照)。

私の具体的な例では、3列のマルチカラム環境に5つのmdframeボックスを配置したい。提案されたようにミニページを使用してボックスの高さを調整しようとした。ここ

完全なコード例を次に示します。

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

結果は次のようになります。

結果

写真からわかるように、右の列は他の列よりも大きいです。これを自動的に解決する方法はありますか? これまでは、長さが一致するまで、他の 2 つの列のボックス間の余白を vspaces を使用して調整していました。これを行うよりエレガントな方法はありますか? ボックスの skipbelow や skipabove などの値を調整しようとしましたが、役に立ちませんでした。

答え1

3 番目の列では、ネストされた 2 つのミニページを使用します。内側のミニページは列全体の高さで、その周囲にフレームを追加します。これにより、外側のミニページが列の高さよりも大きくなります。これらが単なる es である場合は、内側のミニページの高さからと を\fbox減算する必要があります。2\fboxsep2\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私の構文ではパッケージが必要であることに注意してください。

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

ここに画像の説明を入力してください

注: 最後の列の高さにはまだわずかな差異があるようです。追跡する時間はありませんが、列の高さがさまざまな値に変更された場合でも、3 番目の列の高さから 0.8 ポイント余分に減算すると機能することがわかりました。

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

関連情報