Lösung für die deutsche Sprache

Lösung für die deutsche Sprache

Zunächst einmal hier mein 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}

Im Großen und Ganzen macht es genau das, was ich will. Aber leider überschreitet es in einigen Fällen den rechten Rand, wenn die Silbentrennung aufgerufen wird:

Bildbeschreibung hier eingeben

Stimmt etwas mit meiner Umgebungsdefinition nicht?

Antwort1

Mit dem Code, den du uns gezeigt hast, musst du eventuell selbst Trennzeichen hinzufügen, wenn ein Wort bereits einen Bindestrich enthält. Schreibe also stattdessen beispielsweise fmssadasd-dnfm( fms\-sad\-asd-dnfmIch habe zwei Positionen für ein gültiges vermutet -) oder für das Wort mit Bindestrich in deiner Antwort .Pop-OperationenPop-Ope\-ra\-tio\-nen

Das vollständige MWE lautet:

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

und gibt Ihnen das Ergebnis:

Bildbeschreibung hier eingeben

Lösung für die deutsche Sprache

Sie scheinen Deutscher zu sein und die deutsche Sprache zu verwenden: Dann verwenden Sie babelin Ihrem Code das Paket zur Sprachunterstützung. Mit babelkönnen Sie ein festes, immer auf Deutsch "=gedrucktes Wort markieren , aber auch andere (automatische) Silbentrennungen sind zulässig.-

So erhalten Sie mit den folgenden deutschen 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}

Sie erhalten das gewünschte Ergebnis:

Bildbeschreibung hier eingeben

Antwort2

Tatsächlich definieren viele andere Sprachdefinitionsdateien für das babelPaket, neben Deutsch, dieselbe Abkürzung, um explizite Bindestriche zwischen Wörtern einzufügen, ohne die Fähigkeit von TeX, diese Wörter zu trennen, zu beeinträchtigen. Es ist jedoch einfach, mit Hilfe von Anhang H vonDas TeXbook, um ein kleines Makro zu schreiben, das dasselbe tut, ohne von externen Paketen abhängig zu sein.

Tatsächlich sucht TeX vorausschauend nach Wörtern, die ab jedem Verbindungselement in einer horizontalen Liste getrennt werden sollen, sodass es genügt, \nobreak\hskip\z@skipnach dem expliziten Trennstrich hinzuzufügen: \nobreakverhindert einen Zeilenumbruch beim folgenden Verbindungselement, aber dieses Verbindungselement „zählt“ trotzdem als Startpunkt für die Vorausschau. Darüber hinaus, um die Trennung des Wortes zu ermöglichen, dasgeht vorausder explizite Bindestrich, ist es notwendig und ausreichend, zwischen dem Wort und dem Bindestrich bestimmte Knotentypen einzufügen, von denen der „billigste“ wahrscheinlich ein leerer \vadjustKnoten ist. Also:

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

Vergleichen Sie die Ausgabe der beiden \showhyphensBefehle

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

um zu prüfen, ob alles wie erwartet funktioniert. Sie können sich auch die erzeugte Ausgabe ansehen:

Ausgabe des Codes

Antwort3

Ich konnte mir einen Workaround ausdenken: Das Problem trat beispielsweise bei dem deutschen Wort Pop-Operationen auf. Statt dessen Pop-Operationenschrieb ich Pop"=Operationenwhich erlaubt zusätzlich die üblichen Silbentrennungen beider Wörter. In diesem speziellen Fall bekam ich

„Pop-Operation-

nen"

verwandte Informationen