Como posso inserir de forma limpa/eficiente * metade * de um salto entre palavras?

Como posso inserir de forma limpa/eficiente * metade * de um salto entre palavras?

A questão do título está claramente colocada: existe uma maneira mais simples de fazer isso (ou pelo menos uma que realmentefunciona?

Ao lidar com travessões (-), li que é importante manter um pequeno espaço entre o travessão e o texto que ele separa. Estou supondo que seja metade de um salto entre palavras, seja lá o que for. (Posso mudar para 2/3 dependendo, mas isso é irrelevante para a questão central.)

Com espaçamento ideal entre palavras, é recomendado (embora não me lembreonde) que esse espaçamento seja a \thinspace. (Tentar this---separationversus this --- separation—nenhum deles parece muito bom.) No entanto, como você pode ver na captura de tela (exagerada) abaixo, isso pode causar inconsistências visuais (particularmente perceptíveis na primeira linha do segundo parágrafo). (Reconheço que isso também é influenciado pela fonte usada.)

captura de tela do problema original

Minha tentativa de corrigir esse problema:

\documentclass{article}

\newlength\halfinterwordspace
\newsavebox\interwordspace

\newcommand\Dash{%
  \savebox\interwordspace{\ }
  \setlength\halfinterwordspace{.5\wd\interwordspace}
  \typeout{\the\halfinterwordspace}
%
  \unskip                       % remove all previous skips
  \hspace* \halfinterwordspace  % unbreakable half-interword space
  \textemdash                   % dash, equivalent to "---"
  \hspace \halfinterwordspace   % breakable half-interword space
  % ^ also plays nice with microtype protrusion; see q/163116
}

% Uncomment to see the problem I am ultimately trying to fix.
% \def\Dash{\unskip\thinspace\textemdash\thinspace}

\sloppy
\hyphenpenalty=10000

\begin{document}
Lorem ipsum dolor sit amet \Dash consectetur adipiscing elit.  Fusce
pharetra velit in sem congue \Dash quis malesuada lectus
vulputate. Quisque eu scelerisque nunc. Nam at dui eget metus
ullamcorper rutrum quis et tellus.  Interdum et malesuada fames ac
ante ipsum primis in faucibus. Donec vitae augue vel nisi sollicitudin
tempus.  Nam neque sapien \Dash ullamcorper vitae sapien at \Dash
volutpat cursus nisi.  Nullam lorem ante \Dash fermentum sit amet
fermentum et \Dash rhoncus id ligula.  Pellentesque habitant morbi
tristique senectus et netus et malesuada fames ac turpis egestas.
Integer congue \Dash sem eu tincidunt pharetra \Dash mi nunc accumsan
neque \Dash in auctor elit eros eget eros. Vestibulum quis varius
lectus.

Curabitur faucibus \Dash feugiat porttitor.  Lorem ipsum dolor sit
amet \Dash consectetur adipiscing elit.  Vestibulum elementum ipsum id
nisl accumsan \Dash sed rutrum sapien tincidunt.  Cras sodales
sagittis neque vitae sollicitudin. Mauris at viverra quam. In nec
interdum diam \Dash ut ultrices velit. Nulla dapibus vulputate
luctus. Etiam vel faucibus augue \Dash ut aliquet massa. Vivamus eu
nunc at velit varius volutpat at eget eros.  Nulla at justo quis quam
sagittis aliquam eget in tellus.  Nunc est sem \Dash congue et tempus
a \Dash aliquet et nibh.  Sed malesuada \Dash nisi eu placerat porta
\Dash orci augue pellentesque ante \Dash ac sollicitudin urna nunc sit
amet tellus. Curabitur hendrerit et enim non vehicula. Donec in nibh
fringilla \Dash sodales arcu eu \Dash hendrerit massa.
\end{document}

Resultado:

tentativa de captura de tela

Responder1

O espaço normal entre palavras para a fonte atual está disponível como

\fontdimen2\font

Você se engana ao considerar \hspace*como “espaço inquebrável”: é um “espaço que não desaparece”.

Aqui estão duas definições bastante semelhantes para o seu \Dash:

\documentclass{article}

\newcommand\Dash{%
  \leavevmode
  \unskip\nobreak\hspace{.5\fontdimen2\font}%
  \textemdash
  \hspace{.5\fontdimen2\font}%
}

\sloppy
\hyphenpenalty=10000

\begin{document}
Lorem ipsum dolor sit amet \Dash consectetur adipiscing elit.  Fusce
pharetra velit in sem congue \Dash quis malesuada lectus
vulputate. Quisque eu scelerisque nunc. Nam at dui eget metus
ullamcorper rutrum quis et tellus.  Interdum et malesuada fames ac
ante ipsum primis in faucibus. Donec vitae augue vel nisi sollicitudin
tempus.  Nam neque sapien \Dash ullamcorper vitae sapien at \Dash
volutpat cursus nisi.  Nullam lorem ante \Dash fermentum sit amet
fermentum et \Dash rhoncus id ligula.  Pellentesque habitant morbi
tristique senectus et netus et malesuada fames ac turpis egestas.
Integer congue \Dash sem eu tincidunt pharetra \Dash mi nunc accumsan
neque \Dash in auctor elit eros eget eros. Vestibulum quis varius
lectus.

\renewcommand\Dash{%
   \leavevmode\unskip
   \thinspace\textemdash
   \allowbreak\thinspace}

Lorem ipsum dolor sit amet \Dash consectetur adipiscing elit.  Fusce
pharetra velit in sem congue \Dash quis malesuada lectus
vulputate. Quisque eu scelerisque nunc. Nam at dui eget metus
ullamcorper rutrum quis et tellus.  Interdum et malesuada fames ac
ante ipsum primis in faucibus. Donec vitae augue vel nisi sollicitudin
tempus.  Nam neque sapien \Dash ullamcorper vitae sapien at \Dash
volutpat cursus nisi.  Nullam lorem ante \Dash fermentum sit amet
fermentum et \Dash rhoncus id ligula.  Pellentesque habitant morbi
tristique senectus et netus et malesuada fames ac turpis egestas.
Integer congue \Dash sem eu tincidunt pharetra \Dash mi nunc accumsan
neque \Dash in auctor elit eros eget eros. Vestibulum quis varius
lectus.

\end{document}

Pontos a serem observados:

  1. Com \nobreak\hspace{...}nós definimos um espaço ininterrupto

  2. Um kern, e \thinspaceé um deles, não pode ser usado como ponto de quebra de linha, a menos que seja seguido de cola; uma penalidade será um ponto de quebra de linha viável e \allowbreakapenas adicionará uma penalidade zero.

  3. O espaço normal entre palavras para a fonte Computer Modern com tamanho de 10 pontos é 3,33 pontos; um espaço fino é .16667em e um em é 10pt, portanto, no final, um espaço fino (pelo menos com esta configuração de fonte) é igual a meio espaço.

insira a descrição da imagem aqui

Se você quiser adicionar flexibilidade ao espaço ao redor do travessão, então

\newcommand\Dash{%
  \leavevmode\unskip\nobreak
  \hspace{\halfspace}%
  \textemdash
  \hspace{\halfspace}%
}
\newcommand{\halfspace}{%
  .5\fontdimen2\font plus .5\fontdimen3\font minus .5\fontdimen4\font
}

Usamos o fato de que \fontdimen3e \fontdimen4contém a capacidade de expansão e redução padrão do espaço entre palavras.

VerO que significa diferente \fontdimen<num>para obter uma lista do \fontdimensignificado do parâmetro.

informação relacionada