미니페이지 및 MDFramed 상자의 총 높이

미니페이지 및 MDFramed 상자의 총 높이

멀티콜 환경에서 임의의 수의 mdframed 상자를 사용하고 싶습니다. 각 열의 높이는 동일해야 합니다. 즉, 각 열의 마지막 상자 끝이 일치해야 함을 의미합니다(아래 그림 참조).

내 구체적인 예에서는 3열 다중 열 환경에 5개의 mdframed 상자를 넣고 싶습니다. 제안된 대로 미니페이지를 사용하여 상자의 높이를 조정해 보았습니다.여기.

전체 코드 예제는 다음과 같습니다.

\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를 사용했습니다. 이를 수행하는 더 우아한 방법이 있습니까? 이미 상자 아래로 건너뛰기 또는 상자 위로 건너뛰기 등의 값을 조정하려고 시도했지만 도움이 되지 않습니다.

답변1

세 번째 열에서는 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}

여기에 이미지 설명을 입력하세요

참고: 마지막 열 높이에는 여전히 약간의 차이가 있는 것 같습니다. 추적할 시간은 없지만 세 번째 열의 열 높이에서 추가로 0.8pt를 빼면 열 높이가 다양한 값으로 변경되는 경우에도 작동한다는 것을 알았습니다.

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

관련 정보