![Altura total de minipáginas y cuadros enmarcados en MDF](https://rvso.com/image/286369/Altura%20total%20de%20minip%C3%A1ginas%20y%20cuadros%20enmarcados%20en%20MDF.png)
Quiero utilizar una cantidad arbitraria de cuadros mdframed en un entorno multicol. Cada columna debe tener la misma altura, lo que significa que los extremos del último cuadro de cada columna deben coincidir (consulte la figura siguiente).
En mi ejemplo específico, quiero colocar 5 cuadros mdframed en un entorno multicol de 3 columnas. Intenté ajustar las alturas de los cuadros usando minipáginas como se sugiere.aquí.
Aquí hay un ejemplo 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}
El resultado es el siguiente:
Como puedes ver en la imagen, la columna de la derecha es más grande que las demás. ¿Hay alguna manera de solucionar esto automáticamente? Hasta ahora, uso vspaces para ajustar el margen entre los cuadros de las otras dos columnas hasta que las longitudes coincidan. ¿Existe una forma más elegante de hacer esto? Ya intenté ajustar valores como omitir a continuación o omitir arriba de los cuadros, pero no ayuda.
Respuesta1
En su tercera columna, utiliza 2 minipáginas anidadas. La interior tiene la altura completa de la columna y luego se le agrega un marco, lo que en realidad obliga a que la minipágina exterior sea más grande que la altura de la columna. Si fueran simples \fbox
es, habría que restar 2\fboxsep
y 2\fboxrule
de la altura de la minipágina interior.
Pero en mdframed
, lo hice de la siguiente manera. Los definí en el preámbulo:
\newlength\innermarg
\innermarg 4pt\relax
\newlength\outerlinewidth
\outerlinewidth 3pt\relax
\mdfsetup{outerlinewidth=\outerlinewidth, innertopmargin=\innermarg,
innerbottommargin=\innermarg, outermargin=0pt}
Luego, para la minipágina interior de la tercera columna,
\begin{minipage}[t][\columnheight-2\outerlinewidth-2\innermarg][t]{0.9\linewidth}
De esta manera, el borde y el ancho del marco se restan para que no se desborde. Tenga en cuenta que el paquete calc
es necesario para mi sintaxis.
\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: todavía parece haber una ligera discrepancia en la altura de la última columna. No tengo tiempo para rastrearlo, pero descubrí que restar 0,8 puntos adicionales de la altura de la columna de la tercera columna funciona, incluso cuando la altura de la columna se cambia a varios valores:
\begin{minipage}[t][\columnheight-2\outerlinewidth-2\innermarg-.8pt][t]{0.9\linewidth}