Ich bin verwirrt. Möchtest du wissen, wie breit dein längster Eintrag wird, oder was tatsächlich den größten Betrag hat? Wenn es dir um die Länge geht, dann würde ich das ganz anders machen. Und geht es dir um die Anzahl an Token oder die tatsächliche Breite? Manchmal ist es gut, wenn du erklärst, was du machen möchtest.
"Manchmal ist es gut, wenn du erklärst, was du machen möchtest." Ja, das höre ich nicht zum ersten mal. Und wenn ich alles nenne, wird es zu lang und dann heißt es: brech mal runter auf ein MWE. Keine Ahnung, ich habe einen Blackout. Ich möchte das breiteste Element rauslesen und da dachte ich, dass müsste das betragsmäßig größte sein - ist natürlich nicht so 100%ig...
@cis-10 ist breiter als 11, dein Ansatz funktioniert so also nicht wirklich. Ich schreibe gleich eine Antwort. Möchtest du den Inhalt des breitesten Eintrags, oder die Breite des breitesten Eintrags?
Wenn du überprüfen möchtest, wie breit etwas ist, bleibt dir nicht wirklich etwas anderes übrig, als TeX es setzen zu lassen. Man kann mit \savebox (LaTeX) oder \setbox (TeX) Inhalte in ein Boxregister speichern (fertig gesetzt). Anschließend kann man mit \wd die Breite, \ht die Höhe und \dp die Tiefe der Box untersuchen (Tiefe ist die Länge, die der Boxinhalt unter die Grundlinie heraus sticht, Höhe diejenige Länge, die der Boxinhalt oberhalb der Grundlinie bemisst).
Da \foreach die einzelnen Schleifendurchgänge in einer Gruppe durchführt, müssen wir alles, was über einen Durchgang hinaus bestand haben soll, global definieren. Umgekehrt müssen wir nicht aufpassen, dass lokale Änderungen lokal bleiben. Wir können also, ohne uns weitere Gedanken machen zu müssen, Boxregister 0 lokal verwenden.
Um die Breite von etwas zu bestimmen, benutzen wir \setbox<register>\hbox{<etwas>} (eine \vbox, was die Alternative wäre, lässt keine Aufschlüsse über die Breite mehr zu, da sie immer \hsize breit ist). Wir verwenden also \setbox0\hbox{\x}, um die Breite eines Elementes prüfen zu können. Anschließend können wir mit \wd0 auf die Breite zurückgreifen.
Um zu überprüfen, welche Länge größer ist, verwenden wir \ifdim. Schließlich brauchen wir noch eine eigene Größe, die wir global ändern können. Diese erzeugen wir uns mit \newlength\WidestWidth. Das reserviert uns eines von TeXs Skipregistern und gibt ihm den Namen \WidestWidth (genau genommen ist das ein Macro, das die Zahl des Skipregisters enthält, das expandiert dann zu sowas wie \skip<register>).
Schließlich schreiben wir uns noch ein schönes Macro, damit wir den Code nicht jedes Mal wiederholen müssen. Das Macro nimmt als Argument die Liste entgegen, als optionales Argument einen Macronamen, in dem der Inhalt des breitesten Eintrags gespeichert werden soll.
Benötigst du wirklich den betragsmäßig größten Wert, oder ist größter Wert ausreichend? Du könntest mit
\gdef\Max{0} \foreach \x in {0,...,7} {% \ifnum\Max<\x \xdef\Max{\x}% \fi }
arbeiten. Betragsmäßig wäre ein bisschen mehr allerdings ähnlich.
Ach, wenn ich das nur wüsste.
-28
ist die längste auftretende Zeichenfolge. An die will ich rannkommen.Ich bin verwirrt. Möchtest du wissen, wie breit dein längster Eintrag wird, oder was tatsächlich den größten Betrag hat? Wenn es dir um die Länge geht, dann würde ich das ganz anders machen. Und geht es dir um die Anzahl an Token oder die tatsächliche Breite? Manchmal ist es gut, wenn du erklärst, was du machen möchtest.
"Manchmal ist es gut, wenn du erklärst, was du machen möchtest." Ja, das höre ich nicht zum ersten mal. Und wenn ich alles nenne, wird es zu lang und dann heißt es: brech mal runter auf ein MWE. Keine Ahnung, ich habe einen Blackout. Ich möchte das breiteste Element rauslesen und da dachte ich, dass müsste das betragsmäßig größte sein - ist natürlich nicht so 100%ig...
@cis
-10
ist breiter als11
, dein Ansatz funktioniert so also nicht wirklich. Ich schreibe gleich eine Antwort. Möchtest du den Inhalt des breitesten Eintrags, oder die Breite des breitesten Eintrags?Ja, die Breite bekomme ich doch dann mit
settowidth
raus, dachte ich...