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~ break
men 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