Rozdíl mezi mezerou a “ symbolem ” (vlnovka / “ ~ ”)?

Jaký je název, jaký je rozdíl mezi a ~?

Po kompilaci nevidím žádné rozdíly.

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} 

Komentáře

  • Rozdíl uvidíte na konci řádku. ~ je nerozbitný prostor, kde jako prostor není ' t nerozbitný.
  • " Jsem v pohodě " … To ' je poměrně odvážné tvrzení :p
  • Řídí také prostor, ' s se velmi často používá po \the.... příkazu výstupu čítače.
  • V textovém režimu ~ = \nobreakspace
  • @yo ' Mám tedy tyto otázky smazat?

Odpovědět

Rozdíl je vidět na konci řádku. Prostor je rozbitný a ~ je nerozbitný prostor.

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

sem zadejte popis obrázku

Tři slova I am a cool jsou ve druhém řádku slepeny dohromady.

Odpověď

~ je aktivní znak , což znamená, že je to stejné jako makro jako \mbox atd. Jeho funkce je popsána jeho definice, která je

\nobreakspace{} 

, takže psaní ~ je ekvivalentní psaní \nobreakspace{}.

Co \nobreakspace dělá? Tady je:

\leavevmode\nobreak\ 

(za posledním zpětným lomítkem následuje mezera). Odstavec je tedy spuštěn nebo se nic neudělá, pokud již jsme v odstavci (\leavevmode); poté se vydá \nobreak, který zakáže jakékoli zalomení řádku v bodě (\nobreak) a poté se vloží normální mezerový prostor.

Tudíž při psaní

no~break 

bude mezi dvěma slovy mezera, ale po .


Proč {} po \nobreakspace? Pokud máte no~break v titulku, v souboru .aux se zobrazí rozšířená verze

no\nobreakspace {}break 

Závorky byly zavedeny pro zvládnutí ojedinělého případu, kdy je požadována mezera za ~; bez nich by no~ break psal

no\nobreakspace break 

a po přečtení .aux soubor, prostor bude ignorován. S složenými závorkami

no\nobreakspace {} break 

bude zapsán a další prostor nebude ignorován.


Co se stane, když jeden zadá no~ break ve výstupu? Přidají se dvě mezery, ale není u nich možné zalomení řádku, protože mezera je proveditelným bodem zalomení čáry, pouze pokud jí nepředchází vyřazitelná položka; protože \nobreakspace se stává

\leavevmode\penalty 10000 \ 

a pokuty jsou vyřazitelné jako mezery, ani \ ani následující mezeru nelze použít pro zalomení řádku.

V opačném případě no ~break jsou vydány dva mezery, ale nyní je možný bod zlomu na prvním místě (a oba zmizí spolu s pokutou v případě, že bude uplatněna).

Komentáře

  • Pěkné vysvětlení. Mohu říci +1?
  • Mluvíte o no~ break, ale ne o no ~break. V konkrétním případě se tento případ může objevit, když použijete omezení znaků na řádek s návratem řádku v prostoru. Co se stane v tomto případě?
  • @RomainPicot Téměř totéž, dostanete dvě mezery, pokud nedojde k žádné přestávce, ale přestávka je možná (což není u no~ break)
  • @egreg děkuji za přesnost ;-)
  • @RomainPicot jsem přidal závěrečnou poznámku, děkuji za výzvu.

Odpověď

Toto je definice ~ v latex.ltx

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

zatímco \nobreakspace je definován jako

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

Takže aktivní znak ~ odpovídá prostoru, který nelze rozdělit na řádky.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *