Mi a különbség \hbox és ?

Kapcsolódó:

Megjegyzések

  • A fő különbség az, hogy a \hbox használata a LaTeX-ben váratlan eredményekhez vezethet. Tehát mindig használja az utóbbit, hacsak nem tudja, mit csinál ' a \hbox.

Válasz

\hbox egy TeX primitív, a \mbox pedig a

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

segítségével definiált LaTeX makró. A \leavevmode azt jelenti, hogy elindít egy bekezdést, hasonlítsa össze:

\hbox{one} \hbox{two} three 

a

\mbox{one} \mbox{two} three 

A másik különbség az, hogy az argumentumot normál makró argumentumként elemzik, így például a \mbox a működik, és megegyezik a \mbox{a}, míg a \hbox a szintaktikai hiba. A \mbox{\verb|{|} hibákhoz vezet, de a \hbox{\verb|{|} szó szerinti bejelölést tesz közzé {.

Ha kapcsos zárójelcsoportot használ az argumentumhoz, annak explicit {} (vagy más, 1. és 2. katkóddal rendelkező karakterekkel) kell lennie, de \hbox használhat implicit zárójeleket, például \hbox\bgroup\egroup (főleg akkor indíthat el egy mezőt egy makróban, és fejezheti be egy másikban).

Ne használja a \hbox elemet egy LaTeX dokumentumban (bár gyakran látni fogja a belső csomag kódjában).


Igény szerint néhány további részlet a \leavevmode -ról:

\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} 

írja ide a kép leírását

Az első compare után egy bekezdéstörés van, így a TeX függőleges módba megy. Függőleges módban a dobozok függőlegesen vannak egymásra rakva. A következő két doboz \hbox es és two, így függőlegesen csatlakoznak az aktuális függőleges listához. Ezután következik a three t betű; a betűk függőleges módban nem engedélyezettek, ezért a TeX visszaszorítja a bemenetbe, és ehelyett új bekezdést indít, hozzáadja a bekezdés behúzását, majd vízszintes módban ismét látja a three -t.

Az első with után ismét van egy bekezdéstörés, de ezúttal a TeX látja a \leavevmode -et (vagy pontosabban a \unhbox definíciójában), ezért új bekezdést indít, hozzáadja a behúzást és majd vízszintes módban látja az \hbox{one} . \leavevmode semmit nem csinál h-módban, így a sorvégi karakterből adódó szótér ragasztása után a TeX látja a \hbox{two} , amely vízszintesen jön a one után, és a three ugyanabban a bekezdésben következik.

A második compare után a TeX ismét függőleges módban van, de a bekezdést ezúttal zero indítja, tehát a TeX már vízszintes mód, mielőtt látná a \hbox -et, tehát \hbox és \mbox ugyanúgy járnak el.

A LaTeX alapvetően bizonyos hosszúságú, hogy soha ne tegye ki a primitív TeX doboz viselkedését: az összes LaTeX mező \leavevmode -nel kezdődik, hogy cselekedjenek mint \mbox és nem \hbox. (A különbség alapvetően megegyezik a \parbox (LaTeX) és a \vbox (TeX) és a (LaTeX) és \hrule (TeX).)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük