Расстановка переносов в аббревиатурах

Расстановка переносов в аббревиатурах

У меня возникают трудности с правильной расстановкой переносов в длинных аббревиатурах с пользовательскими правилами расстановки переносов при попытке предотвратить переносы строк между длинной и краткой формой.

\documentclass{article}

\usepackage{showframe}

\hyphenation{mi-cros-co-py}

\begin{document}
\paragraph{Long Text} This is some text abcdefgh Acronym Containing Microscopy~(ACM).
\paragraph{Longer Text} This is some text abcdefgh Acronym Containing Microscopy~(ACM).
\paragraph{Even Longer Text} This is some text abcdefgh Acronym Containing Microscopy~(ACM).

\paragraph{Another try} Let's try manual hyphenation.

\paragraph{Long Text} This is some text abcdefgh Acronym Containing Mi\-cros\-co\-py~(ACM).
\paragraph{Longer Text} This is some text abcdefgh Acronym Containing Mi\-cros\-co\-py~(ACM).
\paragraph{Even Longer Text} This is some text abcdefgh Acronym Containing Mi\-cros\-co\-py~(ACM).

\paragraph{Another try} Let's also skip the non-breaking space.

\paragraph{Long Text} This is some text abcdefgh Acronym Containing Mi\-cros\-co\-py (ACM).
\paragraph{Longer Text} This is some text abcdefgh Acronym Containing Mi\-cros\-co\-py (ACM).
\paragraph{Even Longer Text} This is some text abcdefgh Acronym Containing Mi\-cros\-co\-py (ACM).

\end{document}

МРП

Как видно из MWP, в некоторых случаях набор текста заканчивается переполненными hboxes даже без неразрывного пробела и ручного переноса. Установка \hyphenpenalty=0в преамбуле тоже не помогает, тот же результат.

Что я здесь упускаю?

Строго говоря, я использую glossariesпакет в моем фактическом документе с измененным форматированием акронима, включая неразрывный пробел перед краткой формой: \renewcommand{\acrfullformat}[2]{#1~(#2)}я заменил эти части простым текстом для MWP, поскольку результат тот же. Просто на всякий случай, если кто-то знает о решении, основанном на glossariesрешении этой проблемы.

решение1

Если вы не хотите разрыва внутри, (ACM)то добавление дополнительных точек переноса (или уменьшение штрафа за перенос) не поможет. Вам нужно позволить пробелу растянуться, чтобы строка могла заполниться после того, как вы сделали разрыв.

\begin{document}\setlength\emergencystretch{1.5em}

не создает слишком полных строк (хотя создаваемые строки немного разбросаны)

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

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