Was sind die Unterschiede zwischen \hbox
und ?
Verwandte Themen:
- Diese Antwort auf „Was sind die verschiedenen Arten von Feldern in ( La) TeX? „ beschreibt verschiedene Felder im Allgemeinen.
- Diese Antwort auf“ Unterschied zwischen verschiedenen Methoden zum Erstellen von Text im mathematischen Modus „ unterscheidet
\text
von\mbox
.
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}
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.)