Ca titlu, care este diferența dintre un și
~
?
Nu văd diferențe după compilare.
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}
Comentarii
Răspunde
Diferența se poate vedea la sfârșit de linie. Un spațiu se poate sparge și un ~
este un spațiu care nu se poate sparge.
\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}
Cele trei cuvinte I
am
și cool
sunt lipite împreună în a doua linie.
Răspuns
~
este un caracter activ , ceea ce înseamnă că „este la fel ca o macro ca \mbox
și așa mai departe. Funcția sa este descrisă de definiție, care este
\nobreakspace{}
deci tastarea ~
este echivalentă cu tastarea \nobreakspace{}
.
Ce face \nobreakspace
? Iată-l:
\leavevmode\nobreak\
(un spațiu urmărește ultima bară inversă). Deci, un paragraf este pornit sau nu se face nimic dacă suntem deja într-un paragraf (\leavevmode
); apoi se emite \nobreak
, care interzice orice întrerupere de linie la punctul (\nobreak
) și apoi se introduce un spațiu normal între cuvinte.
Astfel, atunci când tastați
no~break
va exista un spațiu între cele două cuvinte, dar linia nu va fi ruptă după no
.
De ce {}
după \nobreakspace
? Dacă aveți no~break
într-o subtitrare, în fișierul .aux
va apărea versiunea extinsă
no\nobreakspace {}break
Parantezele au fost introduse pentru a face față cazului rar când se dorește un spațiu după ~
; fără ele no~ break
ar scrie
no\nobreakspace break
și, la citirea .aux
fișier, spațiul ar fi ignorat. Cu parantezele
no\nobreakspace {} break
va fi scris și spațiul suplimentar nu va fi ignorat.
Ce se întâmplă dacă se introduce unul no~ break
în ieșire? Se adaugă două spații, dar nu este posibilă nici o întrerupere de linie, deoarece un spațiu este un punct de întrerupere fezabil numai dacă nu este precedat de un element de eliminat; întrucât \nobreakspace
devine
\leavevmode\penalty 10000 \
, iar penalizările sunt aruncate ca spațiile, nici \
și nici spațiul următor nu poate fi utilizat pentru o întrerupere de linie.
În caz invers no ~break
sunt scoase două spații, dar acum este posibil un punct de întrerupere la primul spațiu (și ambele vor dispărea împreună cu penalizarea în cazul în care este luată).
Comentarii
- Explicație frumoasă. Pot să spun +1?
- Vorbiți despre
no~ break
, dar nu despreno ~break
. În special, acest caz poate apărea atunci când se utilizează o limitare a caracterelor pe linie cu o retur de linie în interiorul spațiului. Ce se întâmplă în acest caz? - @RomainPicot Aproape la fel, veți obține două spații dacă nu se întâmplă nicio pauză, dar este posibilă o pauză (ceea ce nu este cu
no~ break)
- @egreg vă mulțumesc pentru precizie
;-)
- @RomainPicot Am adăugat o notă finală, mulțumesc pentru prompt.
Răspuns
Aceasta este definiția ~
în latex.ltx
\catcode `\~=13 \def~{\nobreakspace{}}
în timp ce \nobreakspace
este definit ca
\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ }
Deci, caracterul activ ~
este echivalent cu un spațiu care nu poate fi împărțit în linii.
~
este un spațiu incasabil unde spațiul nu este ' nu poate fi incasabil.:p
\the....
.~
=\nobreakspace