BEARBEITET (09/12/09 UTC 2:45)

BEARBEITET (09/12/09 UTC 2:45)

\defwird manchmal als Abkürzung für eine Box-Konstruktion verwendet, dann ist seine Ausgabe manchmal dieselbe wie die Ausgabe mit einem \boxRegister statt \def.

Hier ist die Frage. Wann sollte ich ein \boxRegister anstelle von verwenden \def? Gibt es eine bestimmte Situation, in der das eine besser ist als das andere?


BEARBEITET (09/12/09 UTC 2:45)

Bearbeitete Frage

Gibt es Fälle, in denen \setboxund sein Ausgabebefehlspaar (nicht nur \box0, sondern auch \copy0, \unhbox0, usw.) durch eine Makrodefinition ersetzt werden können, die letztendlich als Box erweitert wird?

Wenn es einen solchen Fall gäbe, gibt es eine bestimmte Situation, in der das eine besser ist als das andere?

Beispiele, dachte ich

Fall 1:

\def\excuse{I should have made my question more clearer before the post.}
\setbox0=\hbox{I should have made my question more clearer before the post.}

Ich denke, der obige Fall ist derselbe, solange ich das Box-Register mit aufrufe \unhcopy0. Ich frage mich jedoch, ob das erste besser ist als das zweite, weil dadurch Speicher gespart werden kann.

Fall 2:

\def\excuse{\hbox{I should have made my question more clearer before the post.}}
\setbox0=\hbox{I should have made my question more clearer before the post.}

Ich denke der obige Fall ist auch der gleiche, solange ich das Box-Register mit aufrufe \copy0.

Fall 3:

\def\myhrulefill{\line{\leaders\hrule\hfill}}
\setbox0=\line{\leaders\hrule\hfill}

enthält in diesem Fall \hboxBefehle und ich vermutete, ob ich sagen kann, dass diese gleich sind oder nicht.

Leider kann ich Ihnen kein ausreichend komplexes Beispiel zeigen, das einige Befehle enthält. Wenn die obigen Beispiele bedingte Syntax wie oder \ifWiederholungssyntax wie enthalten \loop...\repeat, kann das eine möglicherweise keine Alternative zum anderen sein. Ich würde einen solchen Fall besonders gerne kennen.

Antwort1

DernurEine Gemeinsamkeit zwischen einer Box und einem Makro (definiert mit \def) besteht darin, dass sie Dinge speichern. Punkt.


Ein Makro speichert beliebigen TeX-Code, der aus einer Vielzahl von Gründen im Dokument wiederverwendet werden kann. Mit Makros können Sie alles Mögliche tun, von der Vereinfachung des SchreibensArnold Schwarzenegger's Name zuTeX selbst emulieren, vorausgesetzt, Sie haben genügend Makros, die die richtigen Dinge tun.

In einer Box hingegen wird gesetzter Text gespeichert. Und zwar genau das.

Für einfache Anwendungen können beideerscheinenum dasselbe zu tun. Zum Beispiel:

\setbox0=\hbox{Arnold Schwarzenegger}
\def\arnold{Arnold Schwarzenegger}
Here's \box0{} and \arnold{} again.

wird gesetzt:

Bildbeschreibung hier eingeben

Der grundlegende Unterschied zwischen \box0und \arnoldim obigen Beispiel besteht jedoch darin, dass \box0hadbereitsSetzen Sie den Namen in das Feld, und der Befehl \box0hat ihn einfach auf der Seite angezeigt. \arnoldwurde dagegen in eine Zeichenfolge erweitert, die dann gesetzt undpassiertum die gleiche Ausgabe zu erhalten.

Um den Unterschied zu sehen, nehmen wir an, ich ändere die Schriftart, nachdem ich das Feld festgelegt habe, aber bevor ich es ausschreibe:

\setbox0=\hbox{Arnold Schwarzenegger}
\def\arnold{Arnold Schwarzenegger}
\bf Here's \box0{} and \arnold{} again.

Die Ausgabe lautet:

Bildbeschreibung hier eingeben

Sehen Sie, dass der Inhalt der Box nicht die fette Schriftart verwendet. Das liegt daran, dass sie zu diesem Zeitpunkt bereits gesetzt war und die Box nurgebraucht.

Ein weiterer Unterschied besteht darin, dass Sie den Text messen können, sobald er in einem Feld gesetzt ist:

\setbox0=\hbox{Arnold Schwarzenegger}
Here's \copy0{} typeset in a \the\wd0{} box.

Bildbeschreibung hier eingeben

Sie können versuchen, dies mit einem Makro zu tun, aber es wird nicht funktionieren.

Mit einem Makro können Sie jedoch „dynamische Inhalte“ haben, während bei der Box, wie im Beispiel zur Schriftartänderung oben erläutert, alles zum Zeitpunkt der Verwendung festgelegt ist \setbox. Ein (sehr einfaches) Beispiel:

\def\arnold#1{Arnold #1}
Here's \arnold{Schwarzenegger} and another \arnold{Foo}.

was mit Kisten nicht möglich ist.


Wenn Sie sich also für das eine oder das andere entscheiden, müssen Sie sich ansehen, welche Art von Daten Sie speichern möchten, und dann Ihre Wahl treffen. Nur in trivialen Fällen, wie im ersten Beispiel, kann die Wahl mehrdeutig sein, und wenn Sie das Beispiel dennoch nur ein kleines bisschen ändern (wie etwa eine andere Schriftart hinzufügen), ist die eine oder andere Möglichkeit falsch.

Kurz gesagt: Makros sind für TeX-Code und Boxen für gesetzten Text. Wählen Sie, was für die jeweilige Situation am besten geeignet ist.

verwandte Informationen