Ich probiere häufig Dinge aus und gehe ein wenig in mich hinein, um herauszufinden, warum die Dinge (nicht) so funktionieren, wie sie es tun. Die Verwendung von Kästchen und die Ermittlung ihrer Breite, Höhe und Tiefe ist ein wesentlicher Bestandteil davon.
Da es sich hier um temporäres Hack-Zeug handelt, frage ich mich, ob ich den langen Weg gehen muss \newsavebox{\blah}\setbox{\blah}{content}
. Wenn ich mich richtig erinnere, sind Boxen wie Register und sie sind nummeriert. Ich denke also, ich kann es überspringen \newsavebox
und einfach \savebox{16}{content}
…
Ist die obige Vermutung richtig?
Wenn es so funktioniert, welche Zahl ist dann relativ sicher zu verwenden, d. h.
Wie vergibt Latex Boxnummern?
0-255 oder 255-0. Mir ist neulich aufgefallen, dass die Felder 0 und 255 eine besondere Bedeutung haben und man sie besser unverändert lässt.
Gibt es für solche Zwecke vordefinierte Boxen, in denen man nie sicher ist, Inhalte abzulegen, die man später wiederverwenden möchte?
Antwort1
Das Box-Zuordnungssystem von LaTeX ist von einfachem TeX übernommen, daher gelten in beiden Fällen die gleichen Regeln. Boxen haben wie andere Register Nummern und können, wie Sie sehen, auf diese Weise angesprochen werden. In Wirklichkeit ist dies primitive Syntax, keine LaTeX-Syntax, also
\setbox0=\hbox{content}
ist brauchbar auf einem niedrigen Niveau, aber
\savebox{0}{content}
ist wirklich nicht zu fördern!
Knuth hat ein Schema entwickelt, um eine bestimmte Anzahl von Registern als Arbeitsspeicher verfügbar zu machen, auf den über eine Nummer zugegriffen werden kann. Gemäß Konvention können Register mit geraden Nummern von 0 bis 9 als Arbeitsspeicher verwendet und lokal festgelegt werden, während Register mit ungeraden Nummern im gleichen Bereich globaler Arbeitsspeicher sind. Außer auf einer sehr niedrigen Ebene ist es jedoch viel üblicher, benannten Arbeitsspeicher zu verwenden: \@tempboxa
ist beispielsweise in LaTeX verfügbar.
Sie können jedes Register direkt über die Nummer verwenden, aber Sie geraten möglicherweise in Schwierigkeiten, da anderer Code möglicherweise einen zugewiesenen Namen für dasselbe Register hat und nicht weiß, was Sie vorhaben. Ich würde dringend empfehlen, Ihre eigenen „Pool“-Boxen zu definieren, wenn Sie beim Speichern von Material etwas Flexibilität wünschen, ohne neue Boxnamen erstellen zu müssen.
Beachten Sie, dass der gesamte Sinn der LaTeX-Syntax auf höherer Ebene darin besteht, Tools für Dokumentautoren bereitzustellen, wobei normalerweise die Verwendung eines dedizierten benannten Bereichs für Material bei weitem der beste Ansatz ist.