Differenza tra uno spazio e un simbolo “ wave ” (tilde / “ ~ ”)?

Come titolo, qual è la differenza tra un e ~?

Non vedo differenze dopo la compilazione.

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} 

Commenti

  • Vedrai la differenza alla fine della riga. ~ è uno spazio indistruttibile dove lo spazio non è ' t infrangibile.
  • " Sono cool " … Quella ' è unaffermazione piuttosto audace :p
  • Controlla anche lo spazio, ' è molto spesso usato dopo un comando di output del contatore \the.....
  • In modalità testo ~ = \nobreakspace
  • @yo ' Devo eliminare questa domanda, allora?

Risposta

La differenza può essere vista alla fine di linea. Uno spazio è divisibile e un ~ è uno spazio non divisibile.

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

inserisci qui la descrizione dellimmagine

Le tre parole I am e cool sono incollati insieme nella seconda riga.

Risposta

Il ~ è un carattere attivo , il che significa che “è uguale a una macro come \mbox e così via. La sua funzione è descritta dal suo definizione, che è

\nobreakspace{} 

quindi digitare ~ equivale a digitare \nobreakspace{}.

Che cosa fa \nobreakspace? Eccolo:

\leavevmode\nobreak\ 

(uno spazio segue lultima barra rovesciata) Quindi un paragrafo viene avviato o non viene fatto nulla se “siamo già in un paragrafo (\leavevmode); quindi viene emesso \nobreak, che non consente alcuna interruzione di riga nel punto (\nobreak) e quindi viene inserito uno spazio interword normale.

Pertanto, durante la digitazione

no~break 

ci sarà uno spazio tra le due parole, ma la riga non verrà interrotta dopo no.


Perché {} dopo \nobreakspace? Se hai no~break in una didascalia, nel file .aux verrà visualizzata la versione espansa

no\nobreakspace {}break 

Le parentesi graffe sono state introdotte per far fronte al raro caso in cui si desidera uno spazio dopo ~; senza di essi no~ break scriverebbe

no\nobreakspace break 

e, dopo aver letto il .aux file, lo spazio verrebbe ignorato. Con le parentesi graffe

no\nobreakspace {} break 

verrà scritto e lo spazio aggiuntivo non verrà ignorato.


Cosa succede se si digita no~ break nelloutput? Vengono aggiunti due spazi ma non è possibile alcuna interruzione di riga, perché uno spazio è un punto di interruzione di riga ammissibile solo se non è preceduto da un elemento scartabile; poiché \nobreakspace diventa

\leavevmode\penalty 10000 \ 

e le penalità possono essere eliminate come gli spazi, né \ né il seguente spazio può essere utilizzato per uninterruzione di riga.

Nel caso inverso no ~break vengono emessi due spazi, ma ora è possibile un punto di interruzione al primo spazio (ed entrambi scompariranno insieme alla penalità nel caso in cui venga eseguita).

Commenti

  • Bella spiegazione. Posso dire +1?
  • Parli di no~ break ma non di no ~break. In particolare, questo caso può apparire quando si utilizza un limite di caratteri per riga con un ritorno di riga intead dello spazio. Cosa succede in questo caso?
  • @RomainPicot Quasi uguale, ottieni due spazi se non si verifica alcuna interruzione, ma è possibile uninterruzione (che non è con no~ break)
  • @egreg grazie per la precisione ;-)
  • @RomainPicot Ho aggiunto una nota finale, grazie per il prompt.

Risposta

Questa è la definizione di ~ in latex.ltx

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

mentre \nobreakspace è definito come

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

Quindi, il carattere attivo ~ è equivalente a uno spazio che non può essere suddiviso in righe.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *