Quali sono le differenze tra \hbox
e \mbox
?
Correlati:
- Questa risposta a “Quali sono i diversi tipi di scatole in ( La) TeX? “ discute diverse caselle in generale.
- Questa risposta a” Differenza tra vari metodi per produrre testo in modalità matematica “ differenzia
\text
da\mbox
.
Commenti
Risposta
\hbox
è una primitiva TeX e \mbox
è una macro LaTeX definita tramite
\long\def\mbox#1{\leavevmode\hbox{#1}}
\leavevmode
significa che inizia un paragrafo, confronta:
\hbox{one} \hbox{two} three
con
\mbox{one} \mbox{two} three
Laltra differenza è che largomento viene analizzato come un normale argomento macro, quindi, ad esempio, \mbox a
funziona ed è identico a \mbox{a}
mentre \hbox a
è un errore di sintassi. \mbox{\verb|{|}
porterà a errori ma \hbox{\verb|{|}
inscatolerà un {
testuale.
Se utilizzi un gruppo di parentesi graffe per largomento, deve essere esplicito {}
(o altri caratteri con codici cat 1 e 2) ma \hbox
può utilizzare parentesi graffe implicite come \hbox\bgroup
… \egroup
(in particolare puoi iniziare una casella in una macro e terminarla in un altro).
Non usare \hbox
in un documento LaTeX (sebbene lo vedrai spesso nel codice del pacchetto interno).
Come richiesto, alcuni ulteriori dettagli su \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}
Dopo il primo compare
cè uninterruzione di paragrafo, quindi TeX entra in modalità verticale . In modalità verticale, le caselle vengono impilate verticalmente. Le due caselle successive sono \hbox
es con e two
in modo che vengano aggiunti verticalmente allelenco verticale corrente. Quindi viene la lettera t
di three
; le lettere non sono consentite in modalità verticale, quindi TeX le reinserisce nellinput e inizia invece un nuovo paragrafo, aggiunge il rientro del paragrafo e quindi vede di nuovo three
in modalità orizzontale.
Dopo il primo with
cè di nuovo uninterruzione di paragrafo, ma questa volta TeX vede \leavevmode
(o più esattamente il \unhbox
nella sua definizione), quindi inizia un nuovo paragrafo, aggiunge il rientro e quindi vede \hbox{one}
in modalità orizzontale . \leavevmode
non fa nulla in modalità h, quindi dopo la colla dallo spazio delle parole risultante dal carattere di fine riga, TeX vede \hbox{two}
, che viene orizzontalmente dopo one
e three
segue nello stesso paragrafo.
Dopo il secondo compare
, TeX è di nuovo in modalità verticale, ma questa volta il paragrafo viene avviato da zero
, quindi TeX è già in modalità orizzontale prima che veda \hbox
, quindi \hbox
e \mbox
agiscono allo stesso modo.
Fondamentalmente LaTeX fa di tutto per mai esporre il primitivo comportamento del box TeX: tutti i box LaTeX iniziano con \leavevmode
in modo che agiscano come \mbox
e non \hbox
. (La differenza è sostanzialmente uguale alla differenza tra \parbox
(LaTeX) e \vbox
(TeX) e \rule
(LaTeX) e \hrule
(TeX) per esempio.)
\hbox
in LaTeX può portare a risultati imprevisti. Quindi usa sempre questultimo, a meno che tu non sappia cosa ' stai facendo con\hbox
.