Forskel mellem et mellemrum og et “ bølge ” symbol (tilde / “ ~ ”)?

Som titel, hvad er forskellen mellem en og ~?

Jeg ser ingen forskelle efter kompilering.

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 vil se forskellen i slutningen af linjen. ~ er ubrydeligt rum hvor som plads ikke er ' t ubrydeligt.
  • " Jeg er sej " … At ' er en ret fed udtalelse :p
  • Det styrer også plads, det ' bruges meget ofte efter en \the.... tælleroutputkommando.
  • I teksttilstand ~ = \nobreakspace
  • @yo ' Skal jeg slette disse spørgsmål?

Svar

Forskellen kan ses i slutningen af linjen. Et mellemrum kan brydes, og et ~ er et rum, der ikke kan brydes.

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

indtast billedbeskrivelse her

De tre ord I am og cool limes sammen i anden linje.

Svar

~ er et aktivt tegn , hvilket betyder, at det er det samme som en makro som \mbox osv. Dens funktion er beskrevet af dens definition, som er

\nobreakspace{} 

så at skrive ~ svarer til at skrive \nobreakspace{}.

Hvad gør \nobreakspace Her er det:

\leavevmode\nobreak\ 

(et mellemrum følger den sidste tilbageslag). Så et afsnit startes, eller der gøres intet, hvis vi allerede er i et afsnit (\leavevmode); derefter udstedes \nobreak, hvilket ikke tillader enhver linjeskift på punktet (\nobreak), og derefter indsættes et normalt mellemord mellemrum.

Når du skriver

no~break 

, er der således et mellemrum mellem de to ord, men linjen brydes ikke efter no.


Hvorfor {} efter \nobreakspace? Hvis du har no~break i billedtekst, vises den udvidede version i .aux -filen

no\nobreakspace {}break 

Seler er indført for at klare det sjældne tilfælde, når der ønskes et mellemrum efter ~; uden dem no~ break ville skrive

no\nobreakspace break 

og ved læsning af .aux fil, blev rummet ignoreret. Med seler

no\nobreakspace {} break 

skrives, og det ekstra mellemrum ignoreres ikke.


Hvad sker der, hvis man skriver no~ break i output? To mellemrum tilføjes, men ingen linjeskift på dem er mulig, fordi et mellemrum kun er et mulig linjeskiftpunkt, hvis det ikke forud for en genstand, der kan kasseres; da \nobreakspace bliver

\leavevmode\penalty 10000 \ 

og sanktioner kan kasseres som mellemrum, hverken \ eller det følgende mellemrum kan ikke bruges til en linjeskift.

I omvendt tilfælde no ~break to mellemrum udgives, men nu er et brudpunkt muligt i det første mellemrum (og begge forsvinder sammen med straffen, hvis det tages).

Kommentarer

  • God forklaring. Kan jeg sige +1?
  • Du taler om no~ break men ikke om no ~break. I særdeleshed kan dette tilfælde forekomme, når der bruges en kulbegrænsning pr. Linje med en linjeretur i stedet for rummet. Hvad sker der i dette tilfælde?
  • @RomainPicot Næsten det samme, du får to mellemrum, hvis der ikke sker nogen pause, men en pause er mulig (hvilket ikke er med no~ break)
  • @egreg tak for præcisionen ;-)
  • @RomainPicot Jeg tilføjede en sidste note, tak for prompten.

Svar

Dette er definitionen af ~ i latex.ltx

\catcode `\~=13 \def~{\nobreakspace{}} 

mens \nobreakspace er defineret som

\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ } 

Så det aktive tegn ~ svarer til et mellemrum, der ikke kan opdeles i linjer.

Skriv et svar

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