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}
列の数は、要素の最大幅が与えられた場合、「autocolumn 環境/コマンド」(任意の名前を付けてください) を含むボックスの幅から自動的に推測される必要があります。
何かアイデアはありますか? LuaLaTeX を使用することもできますが、この解決策は速度が遅く、メモリを大量に消費するため、これが最後の選択肢です。
答え1
\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}