Diferența dintre un spațiu și un simbol “ undă ” (tilde / “ ~ ”)?

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

  • Veți vedea diferența la sfârșitul liniei. ~ este un spațiu incasabil unde spațiul nu este ' nu poate fi incasabil.
  • " Sunt tare " … Acea ' este o afirmație destul de îndrăzneață :p
  • Controlează și spațiul, ' este foarte des folosit după o comandă de ieșire a contorului \the.....
  • În modul text ~ = \nobreakspace
  • @yo ' Ar trebui să șterg aceste întrebări, atunci?

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} 

introduceți descrierea imaginii aici

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 despre no ~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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *