Skillnad mellan ett mellanslag och en “ våg ” symbol (tilde / “ ~ ”)?

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

  • Du ser skillnaden i slutet av raden. ~ är obrytbart utrymme där som utrymme inte är ' t okrossbart.
  • " Jag är cool " … Det ' är ett ganska djärvt uttalande :p
  • Den kontrollerar också rymden, den ' används ofta efter ett \the.... räknarutmatningskommando.
  • I textläge ~ = \nobreakspace
  • @yo ' Ska jag ta bort de här frågorna?

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} 

ange bildbeskrivning här

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 om no ~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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *