Quali sono le differenze tra \hbox e \mbox?

Correlati:

Commenti

  • La differenza principale è che luso di \hbox in LaTeX può portare a risultati imprevisti. Quindi usa sempre questultimo, a meno che tu non sappia cosa ' stai facendo con \hbox.

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} 

inserisci qui la descrizione dellimmagine

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.)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *