Als titel, wat is het verschil tussen een en
~
?
Ik zie geen verschillen na de compilatie.
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}
Reacties
Antwoord
Het verschil is te zien aan het einde van de lijn. Een spatie is breekbaar en een ~
is een niet-breekbare spatie.
\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 drie woorden I
am
en cool
zijn aan elkaar gelijmd in de tweede regel.
Antwoord
De ~
is een actief teken , wat betekent dat het “hetzelfde is als een macro zoals \mbox
enzovoort. Zijn functie wordt beschreven door zijn definitie, die is
\nobreakspace{}
dus het typen van ~
is gelijk aan het typen van \nobreakspace{}
.
Wat doet \nobreakspace
? Hier is het:
\leavevmode\nobreak\
(er volgt een spatie na de laatste backslash.) Dus een alinea wordt gestart of er wordt niets gedaan als we “al in een alinea zijn (\leavevmode
); dan wordt \nobreak
uitgegeven, wat elke regeleinde op het punt (\nobreak
) niet toestaat, en dan wordt een normale interwoordspatie ingevoegd.
Bij het typen
no~break
zal er dus een spatie staan tussen de twee woorden, maar de regel wordt niet onderbroken na no
.
Waarom de {}
na \nobreakspace
? Als u no~break
in een bijschrift heeft, zal in het .aux
bestand de uitgebreide versie verschijnen
no\nobreakspace {}break
De accolades zijn geïntroduceerd om om te gaan met het zeldzame geval dat een spatie na ~
gewenst is; zonder hen zou no~ break
schrijven
no\nobreakspace break
en, bij het lezen van de .aux
bestand, wordt de spatie genegeerd. Met de accolades
no\nobreakspace {} break
wordt geschreven en de extra spatie wordt niet genegeerd.
Wat gebeurt er als men no~ break
in de uitvoer? Er worden twee spaties toegevoegd, maar er is geen regeleinde bij mogelijk, omdat een spatie alleen een haalbaar regeleindepunt is als deze niet wordt voorafgegaan door een weggegooid item; aangezien \nobreakspace
wordt
\leavevmode\penalty 10000 \
en sancties kunnen worden weggegooid als spaties, noch \
noch de volgende spatie kan worden gebruikt voor een regeleinde.
In het omgekeerde geval no ~break
worden twee spaties uitgevoerd, maar nu is een breekpunt mogelijk op de eerste spatie (en beide zullen verdwijnen samen met de straf voor het geval deze wordt ingenomen).
Opmerkingen
- Leuke uitleg. Mag ik +1 zeggen?
- U spreekt over de
no~ break
maar niet overno ~break
. In het bijzonder kan dit geval optreden bij het gebruik van een tekenbeperking per regel met een regelterugloop in de spatie. Wat gebeurt er in dit geval? - @RomainPicot Bijna hetzelfde, je krijgt twee spaties als er geen pauze is, maar een pauze is mogelijk (wat niet is met
no~ break)
- @egreg bedankt voor de precisie
;-)
- @RomainPicot Ik heb een laatste opmerking toegevoegd, bedankt voor de prompt.
Antwoord
Dit is de definitie van ~
in latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
terwijl \nobreakspace
is gedefinieerd als
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Dus het actieve teken ~
is equivalent aan een spatie die niet in regels kan worden opgedeeld.
~
is een onbreekbare ruimte, waar als spatie n ' t onbreekbaar is.:p
\the....
telleruitvoercommando.~
=\nobreakspace