Diferença entre um espaço e um símbolo “ onda ” (til / “ ~ ”)?

Como título, qual é a diferença entre e ~?

Não vejo diferenças após a compilação.

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} 

Comentários

  • Você verá a diferença no final da linha. ~ é um espaço inquebrável, enquanto o espaço não é ' t inquebrável.
  • " Eu sou legal " … Isso ' é uma afirmação bastante ousada :p
  • Ele também controla o espaço, ele ' é muito frequentemente usado após um \the.... comando de saída do contador.
  • No modo de texto ~ = \nobreakspace
  • @yo ' Devo excluir estas perguntas, então?

Resposta

A diferença pode ser vista no final da linha. Um espaço é quebrável e um ~ é um espaço inquebrável.

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

insira a descrição da imagem aqui

As três palavras I am e cool são colados na segunda linha.

Resposta

O ~ é um caractere ativo , o que significa que “é o mesmo que uma macro como \mbox e assim por diante. Sua função é descrita por seu definição, que é

\nobreakspace{} 

portanto, digitar ~ é equivalente a digitar \nobreakspace{}.

O que \nobreakspace faz? Aqui está:

\leavevmode\nobreak\ 

(um espaço após a última barra invertida). Portanto, um parágrafo é iniciado ou nada é feito se já estivermos em um parágrafo (\leavevmode); então \nobreak é emitido, o que não permite qualquer quebra de linha no ponto (\nobreak) e então um espaço normal entre palavras é inserido.

Assim, ao digitar

no~break 

haverá um espaço entre as duas palavras, mas a linha não será quebrada após no.


Por que {} depois de \nobreakspace? Se você tiver no~break em uma legenda, no arquivo .aux a versão expandida aparecerá

no\nobreakspace {}break 

As chaves foram introduzidas para lidar com o raro caso em que um espaço após ~ é necessário; sem eles, no~ break escreveria

no\nobreakspace break 

e, ao ler o .aux arquivo, o espaço será ignorado. Com as chaves

no\nobreakspace {} break 

será escrito e o espaço adicional não será ignorado.


O que acontece se alguém digitar no~ break na saída? Dois espaços são adicionados, mas nenhuma quebra de linha é possível, porque um espaço é um ponto de quebra de linha viável apenas se não for precedido por um item descartável; uma vez que \nobreakspace se torna

\leavevmode\penalty 10000 \ 

e as penalidades são descartáveis como espaços, nem \ nem o espaço a seguir podem ser usados para uma quebra de linha.

No caso reverso no ~break dois espaços são produzidos, mas agora um ponto de quebra é possível no primeiro espaço (e ambos desaparecerão junto com a penalidade caso seja preenchida).

Comentários

  • Bela explicação. Posso dizer +1?
  • Você fala sobre no~ break, mas não sobre no ~break. Particuler, este caso pode aparecer ao usar uma limitação de caracteres por linha com um retorno de linha no lugar do espaço. O que acontece neste caso?
  • @RomainPicot Quase o mesmo, você obtém dois espaços se nenhuma interrupção acontecer, mas uma interrupção é possível (o que não é com no~ break)
  • @egreg, obrigado pela precisão ;-)
  • @RomainPicot Eu adicionei uma nota final, obrigado pelo prompt.

Resposta

Esta é a definição de ~ em latex.ltx

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

enquanto \nobreakspace é definido como

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

Portanto, o caractere ativo ~ é equivalente a um espaço que não pode ser dividido em linhas.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *