Как можно аккуратно/эффективно вставить *половину* межсловного пропуска?

Как можно аккуратно/эффективно вставить *половину* межсловного пропуска?

Вопрос в заголовке поставлен ясно — есть ли более простой способ сделать это (или, по крайней мере, такой, который действительноработает?

Когда имеешь дело с длинными тире (—), я читал, что важно оставлять небольшое пространство между тире и текстом, который оно разделяет. Я предполагаю, что это половина межсловного пропуска, каким бы он ни был. (Я могу изменить его на 2/3, в зависимости от того, но это не имеет значения для основного вопроса.)

При идеальном межсловном интервале рекомендуется (хотя я не могу вспомнитьгде), что этот интервал должен быть \thinspace. (Попробуйте this---separationпротив this --- separation— ни один из них не выглядит очень хорошо.) Однако, как вы можете видеть на (увеличенном) снимке экрана ниже, это может привести к визуальным несоответствиям (особенно заметным в первой строке второго абзаца). (Я понимаю, что на это также влияет используемый шрифт.)

исходный скриншот проблемы

Моя попытка решить эту проблему:

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

Результат:

попытка скриншота

решение1

Нормальный межсловный интервал для текущего шрифта доступен как

\fontdimen2\font

Вы ошибаетесь, когда считаете \hspace*это «неразрывным пробелом»: это «неисчезающий пробел».

Вот два довольно похожих определения для вашего \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}

На что следует обратить внимание:

  1. С помощью \nobreak\hspace{...}мы устанавливаем неразрывный пробел

  2. Керн, а \thinspaceон один, не может использоваться в качестве точки разрыва строки, если за ним не следует клей; штраф будет допустимой точкой разрыва строки и \allowbreakпросто добавит нулевой штраф.

  3. Нормальный межсловный интервал для шрифта Computer Modern размером 10 пунктов составляет 3,33 пункта; тонкий интервал равен .16667em, а em равен 10 пунктам, поэтому в конце тонкий интервал (по крайней мере, при такой настройке шрифта) равен полуинтервалу.

введите описание изображения здесь

Если вы хотите добавить гибкости пространству вокруг длинного тире, то

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

Мы используем тот факт, что \fontdimen3и \fontdimen4содержат растяжимость и сжимаемость по умолчанию межсловного пространства.

ВидетьЧто означают разные \fontdimen<num>для получения списка значений \fontdimenпараметров.

Связанный контент