Die Antwort auf die 2014er Frage "Wie kann ich hyperlinks mit \url umbrechen lassen?" ist zwar recht hilfreich und führt zu relativ sauberen Zeilenumbrüchen, aber die Rechtsbündigkeit ist m. E. nicht optimal. Geht das zu verbessern? Mein Minibeispiel:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[ngerman]{varioref} % Referenzen
\usepackage[T1]{fontenc}
\usepackage{hyperref, cmap}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tabularx}  %für fließend breite Tabellen mit X-Breite
\usepackage{calc}       %für Berechnung von Befehl-Längen wie \textwidth-\parindent 
%Seitenränder
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}
\usepackage{index}
\usepackage[font=footnotesize]{idxlayout}  %Einträge aller Index-Verzeichnisse auf Fußnotengröße gesetzt

%\usepackage{url}
\usepackage{etoolbox}
\appto\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w
\do\x\do\y\do\z}   %definiert die Umbruchstellen, hier alle Buchstaben, nicht aber andere Zeichen!

\begin{document}

Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext ssfsfsfsffshhrthrhrhrrthrhr Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext Fließtext. \\[2cm]

Das ist ein Text mit URL: \url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text\dots

\end{document}

gefragt 25 Jul '15, 15:01

kabel's gravatar image

kabel
25982632
Akzeptiert-Rate: 33%

bearbeitet 25 Jul '15, 16:09

saputello's gravatar image

saputello
11.1k174365

1

Eigentlich eine schöne Frage, aber das Beispiel geht bestimmt sehr viel kürzer. Außerdem solltest Du Dir mal die Warnungen in der Log-Datei anschauen. hyperref sollte man übrigens immer so spät wie möglich laden.

(25 Jul '15, 15:19) saputello
2

Wenn du mal für ein Beispiel etwas Text brauchst, dann verwende das Paket blindtext. Außerdem solltest du \\[<Length>] nur verwenden, wenn du genau weißt, was es tut. Und nein, es sorgt nicht für eine Leerzeile zwischen Absätzen.

(25 Jul '15, 16:23) Johannes

an saputello: umfassend auch für Anfänger wie mich erklärt. an Herbert und saputello: beide aufgezeigten Möglichkeiten ok. \sloppypar erzeugt bei mir ein besseres Ergebnis (steht nicht im Mittelbach).

(25 Jul '15, 19:15) kabel
2

@kabel Bitte beachte: Antwort = Antwort, Kommentar = Kommentar.

(25 Jul '15, 19:27) Johannes

@kabel sloppypar ist eine Umgebung. Bitte nicht als Anweisung missbrauchen, weil es sonst letztlich \sloppy entspricht, mit dem Nachteil, dass alle Absätze mit Trennung potentiell schlechter umbrochen werden als notwendig. Aus demselben Grund sollte man es auf die relevanten Absätze beschränken.

(26 Jul '15, 09:12) saputello

Das Problem in dem Fall ist, dass eigentlich genau ein Zeichen abgetrennt werden müsste, um die URL sauber zu umbrechen. Das passiert aber nicht. Ein Grund dafür ist, dass Du den Umbruch an Großbuchstaben gar nicht erlaubt hast. Ein anderer Grund besteht darin, dass das Paket den Umbruch über den Mathemodus steuert. Dabei werden die Zeichen, die per \UrlBreaks definiert werden, als binary operator deklariert. Das sind Operatoren, bei denen vor dem Operator und nach dem Operator ein Operand erwartet wird. Der Operator schafft damit eine Bindung zum Zeichen (eigentlich Token) danach. Die Stärke dieser Bindung wird (bzw. die Strafpunkte für das Zerreißen der Bindung) wird über \binoppenalty bestimmt. Man könnte nun erwarten, dass das Hinzufügen aller Großbuchstaben via \do\A\do\B\do\Z das Problem löst. Das ist aber nicht so, wie man bereits mit

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}

\usepackage{hyperref}
\usepackage{etoolbox}
\appto\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w
\do\x\do\y\do\z\do\A\do\K}   %definiert die Umbruchstellen, hier alle Kleinbuchstaben + A und K, nicht aber andere Zeichen!

\begin{document}

Das ist ein Text mit URL: \url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text \dots

\end{document}

feststellen kann. Als zusätzliches Problem ergibt sich, dass die Zeile dann untervoll bleibt, weil die Abstände der einzelnen mathematischen Elemente der URL fest sind. Erst, wenn man erlaubt, dass diese Abstände vergrößert werden können, funktioniert der Umbruch:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}

\usepackage{hyperref}
\usepackage{etoolbox}
\appto\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w
\do\x\do\y\do\z\do\A\do\K}   %definiert die Umbruchstellen, hier alle Kleinbuchstaben + A und K, nicht aber andere Zeichen!

\begin{document}

{\setlength{\emergencystretch}{1.3pt}%
Das ist ein Text mit URL:
\url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text \dots
\par}

\end{document}

Im Beispiel genügen dafür 1,3 pt, was ungefähr der Unterschied zwischen der Länge des URL-Teils der Zeile und der Zeilenlänge ist.

Aber, das ist leider nur die halbe Wahrheit. Denn fügt man nun das J als weiteren Großbuchstaben hinzu, dann funktioniert es plötzlich nicht mehr:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}

\usepackage{hyperref}
\usepackage{etoolbox}
\appto\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w
\do\x\do\y\do\z\do\A\do\J\do\K}   %definiert die Umbruchstellen, hier alle Kleinbuchstaben + A, J und K, nicht aber andere Zeichen!

\begin{document}

{\setlength{\emergencystretch}{1.3pt}%
Das ist ein Text mit URL:
\url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text \dots
\par}

\end{document}

Die Ursache liegt darin, wie TeX das Token nach einem Operator behandelt. Dieses ist nämlich auch dann kein Operator, wenn es durch seinen \mathcode eigentlich einer wäre. Im Beispiel wird (zufällig) J zu einem Operator. Das i ist keiner, das c ist wieder einer, das A ist keiner und damit wird der Umbruch zwischen A und K nicht durch \binoppenalty bestimmt und ist somit nicht erlaubt.

Die Alternative besteht darin, die erste Zeile früher zu umbrechen. Allerdings geht das wiederum nicht, weil in jener Zeile zu wenige Worte stehen, um den dann notwendigen zusätzlichen Abstand zu verteilen. Es gibt nun zwei Möglichkeiten, diesen zusätzlichen Abstand trotzdem zu ermöglichen. Zum einen wie von @Herbert in seiner Antwort gezeigt, per sloppypar, zum anderen kann man generell oder nur für diesen einen Absatz einen ausreichend großen Notfallabstand ermöglichen:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}

\usepackage{hyperref}
\usepackage{etoolbox}
\appto\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w
\do\x\do\y\do\z}   %definiert die Umbruchstellen, hier alle Klein-Buchstaben, nicht aber andere Zeichen!

\begin{document}

{\setlength{\emergencystretch}{1em}%
Das ist ein Text mit URL: \url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text \dots\par}

\end{document}

Der Unterschied der beiden Lösungen ist, dass sich sloppypar bereits im zweiten Umbruchversuch (= Versuch mit Trennung) von TeX auswirkt, und daher bei Absätzen mit Trennung den Umbruch bereits verschlechtern kann, wenn das nicht zwingend notwendig wäre. Dagegen, wirkt sich \emergencystretch erst in einem dritter Umbruchversuch aus, der überhaupt nur dann stattfindet, wenn der zweite Versuch nicht erfolgreich war. Nur zur Erklärung sei erwähnt, dass der erste Umbruchversuch einer ganz ohne Trennung ist. Weil das so ist, kann man \emergencystretch auch generell setzen, wenn man häufiger Umbruchprobleme hat. Ich kenne einige Anwender, die das in deutschen Texten auch ohne URL-Probleme generell machen:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}

\usepackage{hyperref}
\setlength{\emergencystretch}{1em}
\usepackage{etoolbox}
\appto\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w
\do\x\do\y\do\z}   %definiert die Umbruchstellen, hier alle Kleinbuchstaben, nicht aber andere Zeichen!

\begin{document}

Das ist ein Text mit URL: \url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text \dots

\end{document}

Wer nun glaubt, dass das noch besser wird, wenn man alle Großbuchstaben in \UrlBreaks aufnimmt, der irrt:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}

\usepackage{hyperref}
\usepackage{etoolbox}
\appto\UrlBreaks{\do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
\do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w
\do\x\do\y\do\z\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J\do\K
\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V\do\W\do\X\do\X\do\Z}   %definiert die Umbruchstellen, hier alle Buchstaben, nicht aber andere Zeichen!

\begin{document}

{\setlength{\emergencystretch}{1em}%
Das ist ein Text mit URL:
\url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text \dots
\par}

\end{document}

Auch hier liegt die Ursache dann wieder darin, dass bei Ji das J ein Operator ist und damit dazwischen ein Umbruch erlaubt ist, ebenso bei cA aber nicht bei AK – jedenfalls wenn ich mich nicht verzählt habe.

Permanenter link

beantwortet 25 Jul '15, 15:53

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 25 Jul '15, 19:34

Nein, hyphenmin ist hier nicht relevant. Die url ist kein Wort, sondern Mathematik mit Penalties. Wenn du \emergencystretch setzt und mit \do\A\do\K die Großbuchstaben zu der \UrlBreaks-Liste hinzufügst, dann wird das einzelne K abgetrennt.

(25 Jul '15, 16:12) Ulrike Fischer

@Ulrike: Hm, wenn man alle Großbuchstaben dazu fügt, wird dann aber AK und nicht K abgetrennt. Irgendwie absurd. Und ohne \emergencystretch geht es gar nicht. Kannst Du das auch erklären?

(25 Jul '15, 17:13) saputello

Wenn ich in deinem ersten Beispiel \do\A\do\K hinzufüge, erhalte ich ein einzelnes K. Nachtrag: UrlBreaks werden Pärchenweise betrachtet: "a series of ‘Break’ characters will break after the first and after every following pair" (ich versuche erst gar nicht, das Beispiel aufzudröseln). Und eine positives \emergencystretch erlaubt einen dritten Durchgang mit mehr Freiheiten.

(25 Jul '15, 17:19) Ulrike Fischer

@Ulrike: So wie ich das sehe, werden die Zeichen aus \UrlBreaks mit dem schlicht mit \mathcode 8192+ versehen, also "2000+. Das wäre eine Deklaration als binary operator. Gleichzeitig wird innerhalb der URLs \binoppenalty angepasst, also die Strafpunkte für das auseinanderreißen an einem binary operator. Die pärchenweise Betrachtung bezieht sich also weniger darauf, dass bei \do\A\do\K A und K ein Paar bilden. Stattdessen werden das A sowie das Zeichen nach dem A ein Paar und ebenso mit K statt A.

(25 Jul '15, 18:55) saputello

@Ulrike: Die Erklärung ist jetzt zwar wesentlich komplizierter als meine erste, aber sie dürfte so weitgehend stimmen. Das Ergebnis, also der Ratschlag zu einem hinreichend großen Wert für \emergencystretch, bleibt der gleiche.

(25 Jul '15, 19:37) saputello
Open in Online-Editor
\begin{sloppypar}% Dann ist jeder Wortzwischenraum möglich
Das ist ein Text mit URL: \url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK} und geht weiter im Text\dots
\end{sloppypar}

alt text

Permanenter link

beantwortet 25 Jul '15, 15:13

Herbert's gravatar image

Herbert
5.1k34
Akzeptiert-Rate: 31%

bearbeitet 25 Jul '15, 15:14

Verwendet man nicht PDFLaTeX, nicht LuaLaTeX und nicht XeLaTeX, sondern LaTeX (also die DVI-Ausgabe), dann gibt es mit breakurl eine einfache Möglichkeit, das Problem zu lösen:

Open in Online-Editor
\documentclass[12pt, oneside,numbers=endperiod]{scrbook}
\usepackage[utf8]{inputenx}% Für den Online-Editor ist UTF8 die einzige korrekte Kodierung!
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[left=3.8cm, right=2.8cm, top=2.5cm, bottom=2cm]{geometry}

\usepackage{hyperref}
\usepackage[anythingbreaks]{breakurl}
\usepackage{showframe}

\begin{document}

{\setlength{\emergencystretch}{1.3pt}%
Das ist ein Text mit URL:
\url{https://www.google.de/search?q=latex+schrift+f%C3%BCr+url&ie=utf-8&oe=utf-8&gws_rd=cr&ei=OLyyVd2aLcGBUeaJicAK}
und geht weiter im Text \dots\par}

\end{document}

ergibt dann direkt eine DVI-Datei mit:

alt text

Das Paket verwendet eine andere Methode, um die URLs zu umbrechen.

Permanenter link

beantwortet 25 Jul '15, 20:18

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

@saputello: Ich verwende PDFLaTeX und die obigen Lösungen sind für mich ok. Danke.

(26 Jul '15, 00:03) kabel
1

@kabel: Du bist nicht allein auf der Welt. Wir bauen hier ein System von Fragen und Antworten, die über das Problem des ursprünglichen Fragestellers hinaus auch anderen helfen sollen. Es gibt nach meiner Erfahrung noch sehr viele Leute, die via latexdvipspstopdf oder latexdvipdfmx arbeiten. Für diese ist breakurl nicht nur eine Option, sondern von erheblichem Nutzen.

(26 Jul '15, 09:09) saputello
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×20
×7

gestellte Frage: 25 Jul '15, 15:01

Frage wurde gesehen: 16,801 Mal

zuletzt geändert: 26 Jul '15, 09:12