Hva er forskjellene mellom \hbox og \mbox?

Relatert:

Kommentarer

  • Hovedforskjellen er at bruk av \hbox i LaTeX kan føre til uventede resultater. Så bruk alltid sistnevnte, med mindre du vet hva du ' gjør med \hbox.

Svar

\hbox er en TeX-primitiv og \mbox er en LaTeX-makro definert via

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

\leavevmode betyr at den starter et avsnitt, sammenlign:

\hbox{one} \hbox{two} three 

med

\mbox{one} \mbox{two} three 

Den andre forskjellen er at argumentet blir analysert som et vanlig makroargument, så for eksempel fungerer \mbox a og er identisk med \mbox{a} mens \hbox a er en syntaksfeil. \mbox{\verb|{|} vil føre til feil, men \hbox{\verb|{|} vil bokse ordrett {.

Hvis du bruker en avstivningsgruppe for argumentet, må den være eksplisitt {} (eller andre tegn med koden 1 og 2), men \hbox kan bruke implisitte bukseseler som \hbox\bgroup\egroup (spesielt kan du starte en rute i en makro og avslutte den i en annen).

Ikke bruk \hbox i et LaTeX-dokument (selv om du ofte vil se det i intern pakkekode).


Som forespurt, noen ytterligere detaljer om \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} 

skriv inn bildebeskrivelse her

Etter den første compare er et avsnittskifte, så TeX går i vertikal modus. I vertikal modus stables boksene vertikalt. De neste to boksene er \hbox es med og two slik at de blir lagt vertikalt til den gjeldende vertikale listen. Så kommer bokstaven t i three; bokstaver er ikke tillatt i vertikal modus, så TeX skyver den tilbake i inngangen og starter i stedet et nytt avsnitt, legger til avsnittinnrykk og ser deretter three igjen i horisontal modus.

Etter den første with er det igjen et avsnittbrudd, men denne gangen ser TeX \leavevmode (eller mer nøyaktig \unhbox i definisjonen), så den starter et nytt avsnitt, legger til fordypningen og deretter ser \hbox{one} i horisontal modus . \leavevmode gjør ingenting i h-modus, så etter limet fra ordet space som kommer fra end-of-line-tegnet, ser TeX \hbox{two} , som kommer horisontalt etter one, og three følger i samme avsnitt.

Etter det andre compare er TeX igjen i vertikal modus, men denne gangen startes avsnittet av zero, så TeX er allerede i horisontal modus før den ser \hbox, så \hbox og \mbox fungerer på samme måte.

LaTeX går i utgangspunktet til å aldri avsløre den primitive TeX-boksens oppførsel: alle LaTeX-bokser starter med \leavevmode slik at de handler som \mbox og ikke \hbox. (Forskjellen er i utgangspunktet den samme som forskjellen mellom \parbox (LaTeX) og \vbox (TeX) og \rule (LaTeX) og \hrule (TeX) for eksempel.)

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *