Was sind die Unterschiede zwischen \hbox und ?

Verwandte Themen:

Kommentare

  • Der Hauptunterschied besteht darin, dass die Verwendung von \hbox in LaTeX zu unerwarteten Ergebnissen führen kann. Verwenden Sie daher immer Letzteres, es sei denn, Sie wissen, was Sie ' mit \hbox tun.

Antwort

\hbox ist ein TeX-Grundelement und \mbox ist Ein LaTeX-Makro, das über

\long\def\mbox#1{\leavevmode\hbox{#1}} 

definiert wurde. \leavevmode bedeutet, dass ein Absatz gestartet wird, vergleiche:

\hbox{one} \hbox{two} three 

mit

\mbox{one} \mbox{two} three 

Der andere Unterschied besteht darin, dass das Argument als normales Makroargument analysiert wird. So funktioniert beispielsweise \mbox a und ist identisch mit \mbox{a}, während \hbox a ein Syntaxfehler ist. \mbox{\verb|{|} führt zu Fehlern, aber \hbox{\verb|{|} enthält ein wörtliches {.

Wenn Sie für das Argument eine geschweifte Klammer verwenden, muss diese explizit {} (oder andere Zeichen mit den Catcodes 1 und 2), aber \hbox kann implizite Klammern wie \hbox\bgroup\egroup verwenden (insbesondere können Sie eine Box in einem Makro starten und beenden in einem anderen).

Verwenden Sie \hbox nicht in einem LaTeX-Dokument (obwohl Sie es häufig im internen Paketcode sehen werden).

Auf Anfrage einige weitere Details zu \leavevmode:

\documentclass{article} \begin{document} compare \hbox{one} \hbox{two} three with \mbox{one} \mbox{two} three see? compare zero \hbox{one} \hbox{two} three with zero \mbox{one} \mbox{two} three see? \end{document} 

Geben Sie hier die Bildbeschreibung ein.

Nachdem das erste compare ein Absatzumbruch ist, wechselt TeX in den vertikalen -Modus. Im vertikalen Modus werden Boxen vertikal gestapelt. Die nächsten beiden Boxen sind \hbox mit und two, sodass sie vertikal an die aktuelle vertikale Liste angehängt werden. Dann kommt der Buchstabe t von three; Buchstaben sind im vertikalen Modus nicht zulässig, daher schiebt TeX sie zurück in die Eingabe und startet stattdessen einen neuen Absatz, fügt den Absatzeinzug hinzu und sieht dann im horizontalen Modus die three erneut.

Nach dem ersten with gibt es erneut einen Absatzumbruch, aber diesmal sieht TeX \leavevmode (oder genauer das \unhbox in seiner Definition), beginnt also einen neuen Absatz, fügt den Einzug hinzu und sieht \hbox{one} im horizontalen Modus . \leavevmode führt im h-Modus nichts aus. Nach dem Kleben aus dem Wortraum, der sich aus dem Zeilenendezeichen ergibt, sieht TeX \hbox{two} , der horizontal nach one und three folgt, folgt im selben Absatz.

Nach dem zweiten compare befindet sich TeX wieder im vertikalen Modus. Diesmal wird der Absatz jedoch mit zero gestartet, sodass TeX bereits aktiviert ist horizontaler Modus, bevor \hbox angezeigt wird. \hbox und \mbox verhalten sich also genauso.

Grundsätzlich unternimmt LaTeX einige Anstrengungen, um niemals das Verhalten der primitiven TeX-Box aufzudecken: Alle LaTeX-Boxen beginnen mit \leavevmode, damit sie funktionieren wie \mbox und nicht \hbox. (Der Unterschied ist im Wesentlichen der gleiche wie der Unterschied zwischen \parbox (LaTeX) und \vbox (TeX) und (LaTeX) und \hrule (TeX) zum Beispiel.)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.