Ich habe einige Werte, die ich in ein zeilenorientiertes Format einfügen muss, d. h. die Spalten einer Tabelle auf Grundlage ihrer Breite füllen, wie im MWE beschrieben.
\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}
Die Anzahl der Spalten muss automatisch aus der Breite des Felds abgeleitet werden, das die „Autocolumn-Umgebung/den „Autocolumn-Befehl“ (benennen Sie es, wie Sie möchten) enthält, vorausgesetzt, die maximale Breite der Elemente ist gegeben.
Irgendeine Idee? Ich könnte LuaLaTeX verwenden, aber diese Lösung wäre zu langsam und speicherhungrig, also ist dies die letzte Option.
Antwort1
\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}