Hvad er forskellene mellem \hbox og \mbox?

Relateret:

Kommentarer

  • Den største forskel er, at brug af \hbox i LaTeX kan føre til uventede resultater. Brug altid sidstnævnte, medmindre du ved, hvad du ' laver med \hbox.

Svar

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

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

\leavevmode betyder, at den starter et afsnit, sammenlign:

\hbox{one} \hbox{two} three 

med

\mbox{one} \mbox{two} three 

Den anden forskel er, at argumentet parses som et normalt makroargument, så for eksempel fungerer \mbox a og er identisk med \mbox{a} mens \hbox a er en syntaksfejl. \mbox{\verb|{|} vil føre til fejl, men \hbox{\verb|{|} vil sætte en ordret {.

Hvis du bruger en afstivningsgruppe til argumentet, skal den være eksplicit {} (eller andre tegn med catcodes 1 og 2), men \hbox kan bruge implicitte seler som \hbox\bgroup\egroup (især kan du starte et felt i en makro og afslutte det i en anden).

Brug ikke \hbox i et LaTeX-dokument (selvom du ofte vil se det i intern pakkekode).


Som anmodet, nogle yderligere 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} 

indtast billedbeskrivelse her

Efter den første compare er et afsnitskift, så TeX går i lodret tilstand. I lodret tilstand stables kasser lodret. De næste to kasser er \hbox es med og two, så de føjes lodret til den aktuelle lodrette liste. Derefter kommer bogstavet t i three; bogstaver er ikke tilladt i lodret tilstand, så TeX skubber det tilbage i input og starter i stedet et nyt afsnit, tilføjer afsnitindrykket og ser derefter three igen i vandret tilstand.

Efter den første with er der igen et afsnit, men denne gang ser TeX \leavevmode (eller mere præcist \unhbox i sin definition), så det starter et nyt afsnit, tilføjer indrykket og derefter ser \hbox{one} i vandret tilstand . \leavevmode gør intet i h-tilstand, så efter limen fra ordet mellemrum, der stammer fra slutningen af linjetegnet, ser TeX \hbox{two} , som kommer vandret efter one, og three følger i samme afsnit.

Efter det andet compare er TeX igen i lodret tilstand, men denne gang er afsnittet startet med zero, så TeX er allerede i vandret tilstand, før den ser \hbox, så \hbox og \mbox fungerer på samme måde.

Grundlæggende går LaTeX i nogle længder for at aldrig udsætte den primitive TeX-boksadfærd: alle LaTeX-felter starter med \leavevmode, så de handler som \mbox og ikke \hbox. (Forskellen er grundlæggende den samme som forskellen mellem \parbox (LaTeX) og \vbox (TeX) og \rule (LaTeX) og \hrule (TeX) for eksempel.)

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *