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
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}
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~ breakmen ikke omno ~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.
~er ubrydeligt rum hvor som plads ikke er ' t ubrydeligt.:p\the....tælleroutputkommando.~=\nobreakspace