Som titel, vad är skillnaden mellan en och
~
?
Jag ser inga skillnader efter sammanställningen.
MWE:
\documentclass[a4paper]{article} \usepackage[english]{babel} \usepackage[utf8]{inputenc} \usepackage{amsmath} \usepackage{graphicx} \usepackage[colorinlistoftodos]{todonotes} \title{Your Paper} \author{You} \date{\today} \begin{document} \maketitle I am cool. I~am~cool. \end{document}
Kommentarer
Svara
Skillnaden kan ses i slutet av raden. Ett mellanslag är brytbart och ett ~
är ett utrymme som inte kan brytas.
\documentclass[a4paper]{article} \usepackage[english]{babel} \usepackage[utf8]{inputenc} \usepackage{amsmath} \usepackage{graphicx} \usepackage[colorinlistoftodos]{todonotes} \title{Your Paper} \author{You} \date{\today} \begin{document} \maketitle \hspace*{0.9\textwidth}I am cool. \hspace*{0.9\textwidth}I~am~cool. \end{document}
De tre orden I
am
och cool
limmas samman i andra raden.
Svar
~
är ett aktivt tecken , vilket betyder att det är detsamma som ett makro som \mbox
och så vidare. Dess funktion beskrivs av dess definition, vilket är
\nobreakspace{}
så att skriva ~
motsvarar att skriva \nobreakspace{}
.
Vad gör \nobreakspace
? Här är det:
\leavevmode\nobreak\
(ett mellanslag följer det sista bakåtvända snedstrecket.) Så ett stycke startas eller ingenting görs om vi redan finns i ett stycke (\leavevmode
); sedan utfärdas \nobreak
, vilket inte tillåter varje radbrytning vid punkten (\nobreak
) och sedan infogas ett normalt interword-utrymme.
Så när du skriver
no~break
kommer det att finnas ett mellanslag mellan de två orden, men raden bryts inte efter no
.
Varför {}
efter \nobreakspace
? Om du har no~break
i en bildtext, i .aux
filen kommer den utökade versionen att visas
no\nobreakspace {}break
Hängslen har introducerats för att klara det sällsynta fallet när ett mellanslag efter ~
önskas; utan dem skulle no~ break
skriva
no\nobreakspace break
och när de läste .aux
fil skulle utrymmet ignoreras. Med hängslen kommer
no\nobreakspace {} break
att skrivas och det extra utrymmet skulle inte ignoreras.
Vad händer om man skriver no~ break
i utgången? Två mellanslag läggs till men ingen radbrytning är möjlig, eftersom ett mellanslag endast är en möjlig radbrytpunkt om det inte föregås av ett kasserbart objekt. eftersom \nobreakspace
blir
\leavevmode\penalty 10000 \
och påföljder kan kasseras som mellanslag, varken \
eller följande utrymme kan användas för en radbrytning.
I motsatt fall no ~break
två mellanslag matas ut, men nu är en brytpunkt möjlig vid första mellanslaget (och båda kommer att försvinna tillsammans med straffen om det tas).
Kommentarer
- Fin förklaring. Kan jag säga +1?
- Du talar om
no~ break
men inte omno ~break
. I vissa fall kan detta fall uppträda när en char-begränsning per rad används med en linjeåterföring intill utrymmet. Vad händer i det här fallet? - @RomainPicot Nästan samma, du får två mellanslag om ingen paus händer, men en paus är möjlig (vilket inte är med
no~ break)
- @egreg tack för precisionen
;-)
- @RomainPicot Jag lade till en sista anmärkning, tack för uppmaningen.
Svar
Detta är definitionen av ~
i latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
medan \nobreakspace
definieras som
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Så, det aktiva tecknet ~
motsvarar ett mellanslag som inte kan delas in i rader.
~
är obrytbart utrymme där som utrymme inte är ' t okrossbart.:p
\the....
räknarutmatningskommando.~
=\nobreakspace