Re: Breite von Satzobjekten bestimmen
Dirk Hünniger (via tex-d-l Mailing List) <[email protected]> Tue, 7 Apr 2026 10:51:01 +0200
| Newsgroups | gmane.comp.tex.german |
|---|---|
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format...
------------=_1775551928-36371-140
Content-Language: en-US, de-DE
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Hallo Jakob,
ich habe aus deinen Vorschlägen ein Minimalbeispiel konstruiert. Leider
schreibt LaTeX auch hier nach rechts über den Rand hinaus. Trotzdem
vielen Dank für deine Bemühungen
\documentclass{article}
%%%
% Source - https://tex.stackexchange.com/a/43072
% Posted by Martin Scharrer, modified by community. See post 'Timeline'
for change history
% Retrieved 2026-04-06, License - CC BY-SA 3.0
\usepackage{adjustbox}
\usepackage{varwidth}% wird lt. adjustbox-Dokumentation automat. geladen
\newcommand{\Hide}{%
\adjustbox{varwidth=\linewidth,precode=\hphantom}% \hphantom !!!
}
% Usage: \Hide{<content, can be multiple paragraphs>}
% or \Hide\bgroup <content, ...> \egroup
%%%
\usepackage{tabularx}
\begin{document}
\newlength{\tabwidth}%
\settowidth{\tabwidth}{\Hide{\noindent%
\begin{tabularx}{\linewidth}{|*9X|}
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & $\begin{array}{ccccc}u &v &w &x
&y\end{array}$
\end{tabularx}
}}
% \tabwidth und \linewidth vergleichen und ggf. die Schrift skalieren
\begin{tabularx}{\linewidth}{|*9X|}%
1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & $\begin{array}{ccccc}u &v &w &x
&y\end{array}$
\end{tabularx}
\end{document}
Viele Grüße Dirk
On 4/6/26 17:22, Jakob Mendel (via tex-d-l Mailing List) wrote:
> Hallo Dirk,
>
> ich kenne mediawiki2latex gar nicht und habe auch nicht die Zeit, mich
> einzuarbeiten. Ich kann also nur ins Blaue schießen:
>
> \documentclass{article}
> \usepackage{tabularx}
> \begin{document}
> \begin{tabularx}{\linewidth}{*<N>X}% <N> ist die Zahl der Spalten
> [Tabellenkörper]
> \end{tabularx}
> \end{document}
>
> Die Tabellendefinition *<N>X müßtest Du ggf. anpassen, aber das sollte
> sich automatisieren lassen. Dann wären folgende Anforderungen erfüllt:
> - Wenn die Tabelle "zu schmal" ist, wird sie automatisch auf die
> Zeilenbreite ausgetrieben.
> - Wenn es Zeilen mit sehr viel Text gibt, wird dieser Text automatisch
> umbrochen.
>
> Es bleibt: Was tun, wenn die Tabelle trotz Umbruchs langer Einträge
> immer noch breiter als die Zeile ist?
> Falls Deine Heuristik diese Frage nicht zufriedenstellend beantwortet,
> hilft vielleicht das Paket adjustbox (siehe Paket-Dokumentation und
> https://tex.stackexchange.com/questions/43069/how-to-replace-a-large-block-of-text-by-an-empty-block-of-the-same-size,
> 1. Antwort) mit dem bereits von Uwe angesprochenen \settowidth. Das
> folgende Beispiel ist allerdings ungetestet:
>
> \documentclass{article}
> %%%
> % Source - https://tex.stackexchange.com/a/43072
> % Posted by Martin Scharrer, modified by community. See post
> 'Timeline' for change history
> % Retrieved 2026-04-06, License - CC BY-SA 3.0
>
> \usepackage{adjustbox}
> \usepackage{varwidth}% wird lt. adjustbox-Dokumentation automat. geladen
>
> \newcommand{\Hide}{%
> \adjustbox{varwidth=\linewidth,precode=\hphantom}% \hphantom !!!
> }
> % Usage: \Hide{<content, can be multiple paragraphs>}
> % or \Hide\bgroup <content, ...> \egroup
> %%%
> \usepackage{tabularx}
> \newlength{\tabwidth}%
> \begin{document}
> \settowith{\tabwidth}{\Hide{\noindent%
> \begin{tabularx}{\linewidth}{*<N>X}%
> [Tabellenkörper]
> \end{tabularx}
> }}
> % \tabwidth und \linewidth vergleichen und ggf. die Schrift skalieren
> \begin{tabularx}{\linewidth}{*<N>X}%
> [Tabellenkörper]
> \end{tabularx}
> \end{document}
>
> Viele Grüße
> Jakob
>
>
> Am 06.04.26 um 10:48 schrieb Dirk Hünniger (via tex-d-l Mailing List):
>> Hallo Jakob,
>>
>> ich arbeite an meinem Programm mediawiki2latex [1] welches
>> automatisiert LaTeX Dokumente aus Wikipedia Artikeln o.ä. erzeugt.
>> Hierbei kann es vorkommen, dass der zu konvertierenden Wikipedia
>> Artikel Tabellen enthält. Typischerweise sind dort jedoch keine
>> Informationen über die Spaltenbreiten in solchen Tabellen enthalten.
>> Ich muss sie also irgendwie selbst festlegen.
>>
>> Wenn die Inhalte der Tabellenzellen schmal genug sind ist alles gut
>> und ich kann die Tabelle gegebenenfalls künstlich verbreitern um sie
>> auf die vollen Seitenbreite einzupassen. Das ist auch so schon
>> implementiert und funktioniert soweit. Wenn es aber mindestens eine
>> Zelle gibt die sehr viel Text enthält muss dieser Text umbrochen
>> werden. Auch das habe ich bereits mit gewissen Heuristiken
>> implementiert und es funktioniert auch bereits in vielen Fällen
>> hinreichend gut. Auch gibt es eine Heuristik die die gesamte Tabelle
>> kleiner skaliert wenn zu viele Texte in Zellen umbrochen werden müssten.
>>
>> Ich habe jetzt aber noch mal angefangen darüber Gedanken zu machen
>> wie man das korrekter hinbekommen kann. Und beim bisherigen
>> nachdenken ist mir eingefallen, dass man eben kleinstmögliche
>> Spaltenbreite als Eingabewert für diese Rechnung benötigt und
>> deswegen stelle ich diese Frage.
>>
>> Viele Grüße Dirk
>>
>> [1] https://mediawiki2latex.wmcloud.org/
>>
>> On 4/6/26 10:11, Jakob Mendel (via tex-d-l Mailing List) wrote:
>>> Hallo Dirk,
>>>
>>>> [...] Bei der Sache mit tabularx bin ich leider nicht weiter
>>>> gekommen. So wie ich das verstehe werden zuerst die Breiten aller
>>>> Spalten, die kein X haben, berechnet und diese Summe wird dann von
>>>> der vorgegebenen Maximalbreite abgezogen und das Ergebnis durch die
>>>> Anzahl Spalten mit X geteilt und dann wird dieser Wert als
>>>> Spaltenbreite der Spalten mit X festgelegt.
>>> Das verstehe ich ebenso.
>>>
>>>> Leider kann ich aber dadurch auch nicht die unten erklärte
>>>> Minimalbreite eines Satzobjekts bestimmen. Folgendes Minimalbeispiel
>>>>
>>>> \documentclass{article}
>>>> \usepackage{tabularx}
>>>> \begin{document}
>>>> \newsavebox{\mybox}\sbox{\mybox}{\begin{tabularx}{13pt}{|X|}
>>>> $\begin{array}{cc}a&b\end{array}$
>>>> \end{tabularx}}\the\wd\mybox{}
>>>> \end{document}
>>>>
>>>> Liefert immer noch die Ausgabe 13.0 pt.
>>> Das sollte so sein: Wenn Du die Breite (d. h. die Gesamtbreite) der
>>> Tabelle auf 13pt setzt und diese Tabelle in eine Box packst, wird
>>> die Box genau 13pt breit.
>>>
>>>> Ich will halt herausfinden wie breit ein Satzobjekt minimal seien
>>>> muss egal wie häufig es umbrochen wird.
>>> Mir ist bisher nicht klar, *wofür* Du die kleinstmögliche
>>> Spaltenbreite brauchst: Willst Du eine Tabelle mit möglichst
>>> schmalen Spalten erzeugen? Oder willst Du eine möglicht schmale
>>> Tabelle erzeugen, um z. B. umfließenden Text von optimaler
>>> Zeilenlänge zu haben?
>>>
>>> Falls letzteres zutrifft, sieh Dir mal die Pakete wrapfig und
>>> wrapfig2 (Umgebung wraptable) an.
>>>
>>> Uwes Hinweis auf \settowidth ist auf alle Fälle hilfreich.
>>>
>>> Viele Grüße
>>> Jakob
>>>
>>
>>
>
>
>
------------=_1775551928-36371-140
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
--
FAQ: http://texfragen.de/
Durchsuchbares Archiv: https://www.listserv.dfn.de/sympa/arc/tex-d-l
Unsubscribe/Verwaltung: https://www.listserv.dfn.de/sympa/info/tex-d-l
------------=_1775551928-36371-140--