División automática de filas (no de líneas) en tabulares (o análogos) con un número variable de columnas

División automática de filas (no de líneas) en tabulares (o análogos) con un número variable de columnas

Tengo algunos valores que necesito poner en forma de fila principal, es decir, llenar la columna de una tabla en función de su ancho, como se describe en el MWE.

\documentclass[a4paper]{article}
\usepackage[margin=2cm]{geometry} % Just for this example
\setlength{\tabcolsep}{0.5cm}
\newcommand\myelement{\rule{1cm}{0.5cm}}
\begin{document}
Suppose each element width is 1 cm.

The whole page is 21 cm - 2*2 cm = 19 cm and therefore can contain
(19 cm / (1 cm + 2*0.5 cm)) = 9.5 = 9 elements, so the output should be like:

\begin{tabular}{rrrrrrrrr}
\myelement & \myelement & \myelement & \myelement & \myelement & \myelement & \myelement & \myelement & \myelement\\
\myelement & \myelement & \myelement & \myelement & \myelement & \myelement & \myelement & \myelement & \myelement\\
\myelement & \myelement & \myelement
\end{tabular}

~\\[1cm]

\begin{minipage}{0.5\linewidth}
Here the output should be like:

\begin{tabular}{rrrr}
\myelement & \myelement & \myelement & \myelement \\
\myelement & \myelement & \myelement & \myelement \\
\myelement & \myelement & \myelement & \myelement \\
\myelement & \myelement & \myelement & \myelement \\
\myelement & \myelement & \myelement & \myelement \\
\myelement
\end{tabular}
\end{minipage}
\end{document}

El número de columnas debe deducirse automáticamente del ancho del cuadro que contiene el "entorno/comando de columna automática" (nómbrelo como desee), siempre que el ancho máximo de los elementos.

¿Alguna idea? Podría usar LuaLaTeX, pero esta solución sería demasiado lenta y consumiría mucha memoria, por lo que esta es la última opción.

Respuesta1

ingrese la descripción de la imagen aquí

\documentclass[a4paper]{article}
\usepackage[margin=2cm]{geometry} % Just for this example
\setlength{\tabcolsep}{0.5cm}
\newcommand\myelement{\rule{1cm}{0.5cm}}
\newcommand\xelement{\makebox[2cm]{\myelement}\hspace{0pt}}

\begin{document}
Suppose each element width is 1 cm.

The whole page is 21 cm - 2*2 cm = 19 cm and therefore can contain
(19 cm / (1 cm + 2*0.5 cm)) = 9.5 = 9 elements, so the output should be like:


\begin{flushleft}
\xelement  \xelement  \xelement  \xelement  \xelement  \xelement  \xelement  \xelement  \xelement
\xelement  \xelement  \xelement  \xelement  \xelement  \xelement  \xelement  \xelement  \xelement
\xelement  \xelement  \xelement
\end{flushleft}

\bigskip

\begin{minipage}{0.5\linewidth}
Here the output should be like:

\begin{flushleft}
\xelement  \xelement  \xelement  \xelement 
\xelement  \xelement  \xelement  \xelement 
\xelement  \xelement  \xelement  \xelement 
\xelement  \xelement  \xelement  \xelement 
\xelement  \xelement  \xelement  \xelement 
\xelement
\end{flushleft}
\end{minipage}
\end{document}

información relacionada