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
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}
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~ breakma non dino ~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.
~è uno spazio indistruttibile dove lo spazio non è ' t infrangibile.:p\the.....~=\nobreakspace