Hvad er forskellene mellem \hbox
og \mbox
?
Relateret:
- Dette svar på “Hvad er de forskellige slags felter i ( La) TeX? “ diskuterer generelt forskellige felter.
- Dette svar på” Forskel mellem forskellige metoder til fremstilling af tekst i matematisk tilstand “ skelner
\text
fra\mbox
.
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}
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.)