Różnica między spacją a symbolem “ fali ” (tylda / “ ~ ”)?

Jako tytuł, jaka jest różnica między a ~?

Nie widzę różnic po kompilacji.

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} 

Komentarze

  • Zobaczysz różnicę na końcu linii. ~ to niezniszczalna przestrzeń, gdzie jako spacja nie jest ' t niezniszczalna.
  • " Jestem fajny " … To ' to dość odważne stwierdzenie :p
  • Kontroluje również spację, ' jest bardzo często używany po \the.... poleceniu wyjścia licznika.
  • W trybie tekstowym ~ = \nobreakspace
  • @yo ' Czy w takim razie powinienem usunąć te pytania?

Odpowiedź

Różnicę widać na końcu linii. Spację można złamać, a ~ to spacja niemożliwa do złamania.

\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} 

tutaj wprowadź opis obrazu

Trzy słowa I am i cool są sklejone ze sobą w drugiej linii.

Odpowiedź

~ to aktywny znak , co oznacza, że jest taki sam jak makro, na przykład \mbox itd. Jego funkcja jest opisana przez definicja, czyli

\nobreakspace{} 

, więc wpisanie ~ jest równoważne wpisaniu \nobreakspace{}.

Co robi \nobreakspace? Oto on:

\leavevmode\nobreak\ 

(spacja następuje po ostatnim ukośniku odwrotnym). Tak więc akapit jest rozpoczynany lub nic nie jest wykonywane, jeśli „jesteśmy już w akapicie (\leavevmode); następnie wydawany jest \nobreak, co uniemożliwia jakiekolwiek łamanie wiersza w punkcie (\nobreak), a następnie wstawiana jest normalna przestrzeń międzysłowa.

Zatem podczas pisania

no~break 

będzie spacja między dwoma słowami, ale wiersz nie zostanie przerwany po no.


Dlaczego {} po \nobreakspace? Jeśli w podpisie znajduje się no~break, w pliku .aux pojawi się rozszerzona wersja

no\nobreakspace {}break 

Nawiasy klamrowe zostały wprowadzone, aby poradzić sobie z rzadkim przypadkiem, gdy potrzebna jest spacja po ~; bez nich no~ break napisałby

no\nobreakspace break 

i po przeczytaniu .aux, spacja zostanie zignorowana. Z nawiasami klamrowymi

no\nobreakspace {} break 

zostaną zapisane, a dodatkowa spacja nie zostanie zignorowana.


Co się stanie, jeśli wpisze się no~ break w wyjściu? Dodawane są dwie spacje, ale podział wiersza nie jest możliwy, ponieważ spacja jest wykonalnym punktem przerwania wiersza tylko wtedy, gdy nie jest poprzedzona pozycją możliwą do usunięcia; ponieważ \nobreakspace staje się

\leavevmode\penalty 10000 \ 

, a kary można odrzucić jak spacje, ani \ ani następującej spacji nie można użyć do podziału wiersza.

W odwrotnym przypadku no ~break wypisywane są dwie spacje, ale teraz możliwy jest punkt przerwania na pierwszym miejscu (i oba znikną wraz z karą w przypadku jej wykonania).

Komentarze

  • Ładne wyjaśnienie. Czy mogę powiedzieć +1?
  • Mówisz o no~ break, ale nie o no ~break. W szczególności ten przypadek może się pojawić, gdy stosuje się ograniczenie znaku na wiersz ze zwrotem wiersza w spacji. Co się stanie w tym przypadku?
  • @RomainPicot Prawie to samo, otrzymujesz dwie spacje, jeśli nie nastąpi przerwa, ale przerwa jest możliwa (co nie ma miejsca w przypadku no~ break)
  • @egreg dziękuję za precyzję ;-)
  • @RomainPicot Dodałem ostatnią uwagę, dzięki za podpowiedź.

Odpowiedź

To jest definicja ~ w latex.ltx

\catcode `\~=13 \def~{\nobreakspace{}} 

, podczas gdy \nobreakspace jest zdefiniowane jako

\DeclareRobustCommand{\nobreakspace}{% \leavevmode\nobreak\ } 

Tak więc aktywny znak ~ jest odpowiednikiem spacji, której nie można podzielić na linie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *