Решение для немецкого языка

Решение для немецкого языка

Прежде всего, вот мой MWE:

\documentclass[oneside, openright, 12pt]{book}

\usepackage{enumitem}

\newenvironment{boldenumerate}
{\begin{enumerate}[label=\textbf{\arabic*.}]}
    {\end{enumerate}}

\newcommand\bolditem[1]{\item \textbf{#1}}

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

\begin{boldenumerate}
    \bolditem{Caption:} xxx fsdkjnfdskf sdnjdsnfmdns dnsmfndsmfnds nfdsmn fmssadasd-dnfm nsdmfn msndmnsdbfinsfdn
    \bolditem{Another caption:} yy
\end{boldenumerate}

\end{document}

В целом, он делает именно то, что я хочу. Но, к сожалению, он выходит за правый край в некоторых случаях, когда вызывается перенос:

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

Что-то не так с определением моей среды?

решение1

С кодом, который вы нам показали, вам придется добавлять возможные разрывы, чтобы добавлять их самостоятельно, если слово уже содержит дефис. Так что вместо этого вы fmssadasd-dnfmпишете, например fms\-sad\-asd-dnfm(я предположил две позиции для допустимого -) или для вашего слова с дефисом в вашем ответе Pop-Operationenпишете Pop-Ope\-ra\-tio\-nen.

Полная версия MWE выглядит следующим образом:

\documentclass[oneside, openright, 12pt]{book}

\usepackage{enumitem}

\newenvironment{boldenumerate}
{\begin{enumerate}[label=\textbf{\arabic*.}]}
    {\end{enumerate}}

\newcommand\bolditem[1]{\item \textbf{#1}}

\begin{document}

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy 
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam 
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet 
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit 
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam 
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, 
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea 
rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem 
ipsum dolor sit amet.

\begin{boldenumerate}
  \bolditem{Caption:} xxx fsdkjnfdskf sdnjdsnfmdns dnsmfndsmfnds 
    nfdsmn fms\-sad\-asd-dnfm nsdmfn msndmnsdbfinsfdn
  \bolditem{Caption:} xxx fsdkjnfdskf sdnjdsnfmdns dnsmfndsmfnds 
    nfd Pop-Ope\-ra\-tio\-nen nsdmfn msndmnsdbfinsfdn
  \bolditem{Another caption:} yy
\end{boldenumerate}

\end{document}

и дает вам результат:

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

Решение для немецкого языка

Кажется, вы немец, использующий немецкий язык: Тогда вы будете использовать package babelв своем коде для поддержки языка. С помощью babelвы можете использовать "=для обозначения фиксированного, всегда печатаемого -на немецком языке слова, но другие (автоматические) переносы также разрешены.

Итак, вы получите следующий немецкий MWE

\documentclass[oneside, openright, 12pt]{book}

\usepackage[ngerman]{babel} % <=========================================

\usepackage{enumitem}
\usepackage{blindtext} % to get dummy text in used language, if supported

\newenvironment{boldenumerate}
{\begin{enumerate}[label=\textbf{\arabic*.}]}
    {\end{enumerate}}

\newcommand\bolditem[1]{\item \textbf{#1}}


\begin{document}

\blindtext

\begin{boldenumerate}
  \bolditem{Caption:} xxx fsdkjnfdskf sdnjdsnfmdns dnsmfndsmfnds 
    nfdsmn fmssadasd"=dnfm nsdmfn msndmnsdbfinsfdn % <==================
  \bolditem{Caption:} xxx fsdkjnfdskf sdnjdsnfmdns dnsmfndsmfnds 
    nfd Pop"=Operationen nsdmfn msndmnsdbfinsfdn % <====================
  \bolditem{Another caption:} yy
\end{boldenumerate}

\end{document}

вы получаете желаемый результат:

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

решение2

Действительно, многие другие файлы определения языка для babelпакета, помимо немецкого, определяют ту же самую стенографию для вставки явных дефисов между словами, не влияя на способность TeX расставлять дефисы в этих словах. Однако это легко, с помощью Приложения HTeXbook, чтобы написать небольшой макрос, который делает то же самое, не завися от внешних пакетов.

Действительно, TeX смотрит вперед, какие слова нужно перенести, начиная с каждого элемента склейки в горизонтальном списке, поэтому достаточно добавить \nobreak\hskip\z@skipпосле явного дефиса: запретит \nobreakперенос строки в следующем элементе склейки, но этот элемент склейки будет «считаться» отправной точкой для опережающего просмотра, несмотря на это. Более того, для того, чтобы разрешить перенос слова, котороепредшествуетявный дефис, необходимо и достаточно вставить между словом и дефисом определенные типы узлов, «самым дешевым» из которых, вероятно, является пустой \vadjustузел. Итак:

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\makeatletter

\newcommand*\+{\vadjust{}-\nobreak\hskip\z@skip}

\makeatother



\begin{document}

\showhyphens{arithmetical-mathematical-geometrical}
\showhyphens{arithmetical\+mathematical\+geometrical}

This book treats of several complex problems that are
arithmetical\+mathematical\+geometrical in nature.  I~don't believe, however,
that such word as the compound adjective
``arithmetical\+mathematical\+geometrical'' exists in English: indeed, I've just
made it up.

\end{document}

Сравните вывод двух \showhyphensкоманд

Underfull \hbox (badness 10000) in paragraph at lines 18--18
[] \T1/cmr/m/n/10 arithmetical-mathematical-geometrical

Underfull \hbox (badness 10000) in paragraph at lines 19--19
[] \T1/cmr/m/n/10 arith-meti-cal-math-e-mat-i-cal-ge-o-met-ri-cal

чтобы проверить, что все работает как ожидалось. Вы также можете посмотреть на полученный вывод:

Вывод кода

решение3

Я мог бы придумать обходной путь: проблема возникла для немецкого слова Pop-Operationen, например. Вместо Pop-Operationenя написал Pop"=Operationen, что дополнительно позволяет общие переносы обоих слов. В этом особом случае я получил

"Поп-Операция-

нен"

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