This is a general problem of automatically generated bibliographies. Some bits of the bibliography entry may turn out to be unbreakable and if they happen to occur in the wrong place, overfull or underfull boxes are the result. And while this is a general problem, there is no universal good solution that works at all possible levels of the problem.
Since questions about line breaking in the bibliography pop up from time to time, I decided to extend this answer a bit. The answer is split into two parts.
The first part discusses some common specific issues that make line breaking in the bibliography tricky. The second part focusses on general methods to improve line breaking in bibliographies.
Specific issues
URLs and DOIs
One of the most common causes of bad line breaks in the bibliography (and elsewhere) are URLs. By default the url
package (which is the de facto standard for URL typesetting in LaTeX and is loaded for example by hyperref
and biblatex
; it provides the command \url
) only breaks URLs at places where it is aesthetically pleasing: For example after /
, )
and other punctuation like .
,
;
, :
. By default \url
also does not break at hyphens (-
) to avoid the (false) impression that \url
hyphenated the URL. That may not be enough for longer URLs that consist of long strings of letters and numbers as is more and more common nowadays. Since biblatex
typesets DOIs with commands that are very similar to the commands used for URLs, the same applies for DOIs.
There are some ways to get better results in terms of overfull/underfull boxes with URLs and DOIs.
Try to remove clutter from the URL to make it as compact as possible. Sometimes the URLs you get by copying-and-pasting from your browser contain additional unneeded bits like session identifiers, it may be possible to remove those without impacting the validity of the link. Sometimes websites offer a 'share' function that may have a more compact link (which may or may not contain some additional/unneeded tracking bit).
For example the URL of this page is shown as
https://tex.stackexchange.com/questions/442308/how-to-adjust-the-breaking-in-the-bibliography
in my browser. Trial and error shows that the last bit of text in the URL is actually irrelevant and
https://tex.stackexchange.com/questions/442308/
takes us to the same page. When I click on the "share" button, I get an even shorter link
https://tex.stackexchange.com/q/442308/35864
Again, a test shows that the URL works without the last bit and can be shortened to
https://tex.stackexchange.com/q/442308/
Indeed the 35864
in the longer link is my StackExchange user ID. That additional bit in the URL is used to track who posted the link and SE use it to track various badges (and no doubt for other internal data harvesting).
When you manipulate the URL it is imperative to check that it still works. It is always (regardless of whether you modified the URL or not) a good idea to check if the URL still works a few days later maybe even with a different browser to make sure that the link you got was not a single-use or time-limited URL.
biblatex
offers you a finer control over URL breaking in the bibliography. (That might also mean that some methods you find for line breaking URLs may not work with biblatex
.) You can change the values of the counters biburlnumpenalty
, biburlucpenalty
and biburllcpenalty
to allow breaks after numbers, uppercase letters and lowercase letters, respectively. See Line breaks of long URLs in biblatex bibliography? for a good example and URL line breaks with biblatex for some background info, more is at (Another) problem with url hyphenation in bibliography, Avoiding inelegant splits on URLs.
Recently, biblatex
introduced the possibility to add a small stretchable space between characters to improve line breaking. See BibLaTeX long URL extending into border despite using biburllcpenalty (and https://github.com/plk/biblatex/issues/850).
If you don't want to play around with the values of biburlnumpenalty
etc. yourself and just want all URLs to break everywhere, you can load the xurl
package. If you load xurl
after biblatex
it will automatically also affect bibliographies typeset with biblatex
.
ISBNs and other long numbers
Unhyphenated ISBNs and long electronic page numbers/article identifiers can also cause issues with line breaks, because LaTeX does not hyphenate/break numbers.
ISBNs can usually be separated into chunks with hyphens and LaTeX would allow line breaks after those hyphens, so it is recommended use the hyphenated form of the ISBN. If you don't want to add all required hyphens manually and your bibliography manager/tool can't do that for you automatically, Biber's --isbn-normalise
option can help. See Automatically validate and format ISBNs (and Some lines not broken in BibLaTeX bibliography).
For other numbers, one may have to tweak the field format to introduce something like seqsplit
's \seqsplit
command: Too long line in Bibliography, not URL, line break needed.
Tricky words (e.g. technical terms, proper nouns)
Sometimes TeX simply does not know how to hyphenate some of the technical terms or proper nouns in the titles of the works you cite. (Geographical names can be particularly tricky.) If TeX doesn't break the line next to a word like this, you may want to check if TeX knows how to hyphenate it with \showhyphens
(Display hyphenation options for a specific word): Just write \showhyphens{<word>}
and check the .log
file to see if TeX can hyphenate the word. If it can, you should see -
s at possible break points. If there are no possible break points, you can introduce them manually locally with \-
or globally, see for example Breaking words at the end of line. A list of known hyphenation exceptions for US English is available on CTAN as hyphenex
.
Words with hyphens
Words containing hyphens are a special case: TeX will break words containing a hyphen only at the hyphen and nowhere else. Possible workarounds are discussed at Adequate hyphenation of words already containing a hyphen and https://stackoverflow.com/q/2193307.
Dates
The specific issue here is that the entire date "22. 06. 2018" (and the following "].") is a single unbreakable unit. That unit is too long to fit into the first line, but if pushed into the second line in its entirety, the first line would be too sparsely populated for TeX's liking. A possible solution here would be to allow the date to break with
\DefineBibliographyExtras{german}{%
\protected\def\mkbibdateshort#1#2#3{%
\iffieldundef{#3}
{}
{\mkdayzeros{\thefield{#3}}\adddot
\iffieldundef{#2}{}{\addthinspace}}%
\iffieldundef{#2}
{}
{\mkmonthzeros{\thefield{#2}}%
\iffieldundef{#1}
{}
{\iffieldundef{#3}{/}{\adddot\addthinspace}}}%
\iffieldbibstring{#1}
{\bibstring{\thefield{#1}}}
{\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}}
But of course that only works for this particular case and it might be undesirable to have the date break across lines (there is after all a reason for the default of non-breaking dates).
General solutions
Before we continue, for German texts you definitely want to load \usepackage[T1]{fontenc}
if you are using pdfLaTeX (i.e. not when you use XeLaTeX or LuaLaTeX) to enable proper hyphenation of words containing umlauts and other accented characters. Additionally you may want to consider \usepackage{lmodern}
instead of the standard Computer European font you get by default, cf. Latin Modern vs cm-super?.
For more generic solutions you can try (in increasing order of effect size and probably decreasing order of desirability)
Load microtype
. That package enables use of certain microtypography features that can greatly improve line breaking. Of course microtypography can't solve all (especially big) problems. It doesn't help here, the unbreakable chunk is too large.
Even though microtype
did not solve the problem here, it brought a tiny improvement: Initially the entire 2018]. protruded into the margin, now the 2 is inside the text area and only the 018]. crashes the frame.
You can increase \emergencystretch
, see What is the meaning of \fussy, \sloppy, \emergencystretch, \tolerance, \hbadness? and Line breaking of URLs in bibliographies, How to use \sloppy for just some references?. In the example
\begingroup
\setlength{\emergencystretch}{.5em}
\printbibliography
\endgroup
worked. But that value may need to be adjusted for other cases and needs to be found by try and error. Values that are too high may cause unpleasant results.
You can use
\appto\bibfont{\setlength{\emergencystretch}{.5em}}
in the preamble if you want to apply \emergencystretch
to all bibliographies alike.
The nice thing about \emergencystretch
is that it does not influence the line breaking of 'good' paragraphs, i.e. of those that already break and hyphenate nicely (according to TeX's understanding).
Use the option block=space
. This places a slightly larger space after each logical block in the bibliography. That space is allowed to grow and shrink and can thus influence the line breaking.
This happened to work here, because the space required to make the first line 'full enough' for TeX is not very large.
There is a subtle difference between the output for block=space
and the \emergencystretch
solution. If you look really closely you will see that not all spaces have the same length with block=space
- only the space between "blocks" (units defined by the bibliography driver) is stretched out further than usual. With \emergencystretch
all spaces are stretched out equally.
Use \RaggedRight
of ragged2e
for the bibliography, see also Is there a trick to beautify bibliography?.
\usepackage{ragged2e}
...
\begingroup
\RaggedRight
\printbibliography
\endgroup
As with \emergencystretch
\RaggedRight
can be added to the bibliograph font setup in the preamble via
\appto\bibfont{\RaggedRight}
in case it should apply globally to all bibliographies.
Note that this typesets the bibliography left aligned (in Word speak) and not justified any more. Note how the line ends do not meet with the frame at the margin. It is incidental to this example that the two lines ends seem to line up here, in general that need not and will not be the case.
Load biblatex
with the block=ragged
option
This is even more radical than \RaggedRight
's left alignment.
Full MWE with all solutions present but commented out
\documentclass[
pagesize,
usegeometry = on,
DIV = calc,
ngerman
]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[
left = 25mm,
bottom = 20mm,
right = 45mm,
top = 20mm,
showframe,% to show the frame for the margins
]{geometry}
\usepackage[onehalfspacing]{setspace}
\usepackage{
babel,
csquotes
}
\usepackage[
backend = biber,
style = ext-authoryear-comp,
%block=space,% point 2
%block=ragged,% point 5
]{biblatex}
\AfterTOCHead{\singlespacing}
\KOMAoptions{DIV = last}
\AtBeginBibliography{%
\renewcommand*{\mkbibnamefamily}{\textsc}%
\renewcommand*{\mkbibnamegiven}{\textsc}%
}
\DeclareFieldFormat{biblabeldate}{#1}
\DeclareDelimFormat[bib]{nameyeardelim}{\addcomma\space}
\DefineBibliographyStrings{german}{
urlfrom = {verfügbar unter},
urlseen = {zuletzt geprüft am},
}
\DeclareFieldFormat{url}{\bibstring{urlfrom}\addcolon\space\url{#1}}
\DeclareFieldFormat{urldate}{\mkbibbrackets{\bibstring{urlseen}\addcolon\space#1}}
\renewbibmacro*{url+urldate}{%
\usebibmacro{urldate}%
\newunit
\usebibmacro{url}%
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ONLINE{Chemie,
EDITOR = {{LUMITOS GmbH}},% this is needed to avoid the name being split into given and family parts
LOCATION = {Berlin},
URL = {http://www.chemie.de/lexikon/Kerosin.html},
TITLE = {Kerosin},
URLDATE = {2018-06-22},
}
\end{filecontents}
\addbibresource{\jobname.bib}
% for breakable date, remove the \iffalse and \fi to test
\iffalse
\DefineBibliographyExtras{german}{%
\protected\def\mkbibdateshort#1#2#3{%
\iffieldundef{#3}
{}
{\mkdayzeros{\thefield{#3}}\adddot
\iffieldundef{#2}{}{\addthinspace}}%
\iffieldundef{#2}
{}
{\mkmonthzeros{\thefield{#2}}%
\iffieldundef{#1}
{}
{\iffieldundef{#3}{/}{\adddot\addthinspace}}}%
\iffieldbibstring{#1}
{\bibstring{\thefield{#1}}}
{\dateeraprintpre{#1}\mkyearzeros{\thefield{#1}}}}}
\fi
% point 1
%\usepackage{microtype}
% for point 4
%\usepackage{ragged2e}
\begin{document}
Text. Text. Text. Text. Text. Text. Text. Text. Text. Text. Text. Text. Text \autocite{Chemie}.
\printbibliography
% point 3
%\begingroup
%\setlength{\emergencystretch}{.5em}
%\printbibliography
%\endgroup
% point 4
%\begingroup
%\RaggedRight
%\printbibliography
%\endgroup
\end{document}
I removed your comments to make mine more visible and show where the %
is needed to avoid unwanted space, see What is the use of percent signs (%) at the end of lines?.
Note also that I removed the default settings sortlocale=auto
and sorting=nyt
and that I added the necessary braces for the corporate author "LUMITOS GmbH", see Using a 'corporate author' in the "author" field of a bibliographic entry (spelling out the name in full).