![Altura Total das Minipáginas e Caixas MDFramed](https://rvso.com/image/286369/Altura%20Total%20das%20Minip%C3%A1ginas%20e%20Caixas%20MDFramed.png)
Quero usar um número arbitrário de caixas mdframed em um ambiente multicol. Cada coluna deve ter a mesma altura, o que significa que as extremidades da última caixa de cada coluna devem corresponder (veja a figura abaixo).
No meu exemplo específico, quero colocar 5 caixas mdframed em um ambiente multicols de 3 colunas. Tentei ajustar a altura das caixas usando minipáginas conforme sugeridoaqui.
Aqui está um exemplo de código completo:
\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}
O resultado é o seguinte:
Como você pode ver na imagem, a coluna da direita é maior que as outras. Existe uma maneira de resolver isso automaticamente? Até agora, eu uso vspaces para ajustar a margem entre as caixas nas outras duas colunas até que os comprimentos correspondam. Existe uma maneira mais elegante de fazer isso? Já tentei ajustar valores como pular abaixo ou pular acima das caixas, mas não adianta.
Responder1
Na sua terceira coluna, você usa 2 minipáginas aninhadas. A interna tem a altura total da coluna e então você adiciona um quadro sobre ela, o que na verdade força a minipágina externa a ser maior que a altura da coluna. Se fossem meros \fbox
es, seria necessário subtrair 2\fboxsep
e 2\fboxrule
da altura da minipágina interna.
Mas em mdframed
, eu fiz da seguinte maneira. Eu os defini no preâmbulo:
\newlength\innermarg
\innermarg 4pt\relax
\newlength\outerlinewidth
\outerlinewidth 3pt\relax
\mdfsetup{outerlinewidth=\outerlinewidth, innertopmargin=\innermarg,
innerbottommargin=\innermarg, outermargin=0pt}
Então, para a minipágina interna da 3ª coluna,
\begin{minipage}[t][\columnheight-2\outerlinewidth-2\innermarg][t]{0.9\linewidth}
Dessa forma, a borda e a largura do quadro são subtraídas, para não transbordar. Observe que o pacote calc
é necessário para minha sintaxe.
\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}
Nota: ainda parece haver uma ligeira discrepância na altura da última coluna. Não tenho tempo para rastreá-lo, mas descobri que subtrair 0,8pt extra da altura da coluna da terceira coluna funciona, mesmo quando a altura da coluna é alterada para vários valores:
\begin{minipage}[t][\columnheight-2\outerlinewidth-2\innermarg-.8pt][t]{0.9\linewidth}