这个问题继续我的早期发布。
我必须对我的学术写作使用稍微不寻常的边距和行距。MWE:
\documentclass[
pagesize,
usegeometry = on,
DIV = calc,% for the line spacing, KOMA-Script manual, page 40
ngerman
]{scrartcl}
\usepackage[
left = 25mm,
bottom = 20mm,
right = 45mm,
top = 20mm
]{geometry}
\usepackage[onehalfspacing]{setspace}% for the line spacing, KOMA-Script manual, page 40
\usepackage{
babel,
csquotes
}
\usepackage[
backend = biber,
sortlocale = auto,
sorting = nyt,
style = ext-authoryear-comp
]{biblatex}
% for the line spacing, KOMA-Script manual, page 40:
\AfterTOCHead{\singlespacing}
\KOMAoptions{DIV = last}
% adjusting the bibliography
\AtBeginBibliography{\renewcommand*{\mkbibnamegiven}{\textsc}}% small caps for the author name
\AtBeginBibliography{\renewcommand*{\mkbibnamefamily}{\textsc}}% small caps for the author surname
\DeclareFieldFormat{biblabeldate}{#1}% year without the surrounding brackets
\DeclareDelimFormat[bib]{nameyeardelim}{\addcomma\space}% comma before the year
% changes the type @online
\DefineBibliographyStrings{german}{
urlfrom = {verfügbar unter},
urlseen = {zuletzt geprüft am}
}
% changes the format of the fields url and urldate
\DeclareFieldFormat{url}{\bibstring{urlfrom}\addcolon\space\url{#1}}
\DeclareFieldFormat{urldate}{\mkbibbrackets{\bibstring{urlseen}\addcolon\space#1}}
\renewbibmacro*{url+urldate}{% changes the default order of the fields url and urldate
\usebibmacro{urldate}%
\newunit
\usebibmacro{url}%
}
\begin{filecontents}{\jobname.bib}
@ONLINE{Chemie,
EDITOR = {LUMITOS GmbH},
LOCATION = {Berlin},
URL = {http://www.chemie.de/lexikon/Kerosin.html},
TITLE = {Kerosin},
URLDATE = {2018-06-22},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Text. Text. Text. Text. Text. Text. Text. Text. Text. Text. Text. Text. Text \autocite{Chemie}.
\printbibliography
\end{document}
结果:
我怎样才能改善断线现象?
提前感谢您的帮助和努力。
答案1
这是自动生成书目的一个普遍问题。书目条目的某些部分可能被证明是不可破坏的,如果它们恰好出现在错误的位置,就会导致框过满或不足。虽然这是一个普遍问题,但没有一个通用的好解决方案可以在问题的所有可能级别上起作用。
由于关于参考书目换行的问题时常出现,我决定稍微扩展一下这个答案。答案分为两部分。第一部分讨论了一些导致参考书目换行变得棘手的常见具体问题。第二部分重点介绍改进参考书目换行的一般方法。
具体问题
URL 和 DOI
导致参考书目(以及其他地方)换行不当的最常见原因之一是 URL。默认情况下,该url
包(这是 LaTeX 中 URL 排版的事实标准,例如通过hyperref
和加载biblatex
;它提供了命令\url
)只会在美观的地方断开 URL:例如在/
,)
和其他标点符号(如.
,
;
, )之后:
。默认情况下\url
也不会在连字符(-
)处断开,以避免给人留下 URL 被连字符化的(错误)印象\url
。对于现在越来越常见的由长串字母和数字组成的较长 URL,这可能还不够。由于biblatex
排版 DOI 的命令与用于 URL 的命令非常相似,因此这同样适用于 DOI。
有一些方法可以在 URL 和 DOI 框过满/不足的情况下获得更好的结果。
尝试从 URL 中删除杂乱信息,使其尽可能紧凑。有时,您从浏览器复制粘贴获得的 URL 包含额外的不需要的位,例如会话标识符,可以删除这些位而不会影响链接的有效性。有时网站提供“共享”功能,该功能可能具有更紧凑的链接(可能包含或不包含一些额外的/不需要的跟踪位)。
例如,此页面的 URL 显示为
https://tex.stackexchange.com/questions/442308/how-to-adjust-the-breaking-in-the-bibliography
在我的浏览器中。反复试验表明,URL 中的最后一段文本实际上是无关紧要的,
https://tex.stackexchange.com/questions/442308/
带我们到同一个页面。当我点击“分享”按钮时,我得到的链接更短
https://tex.stackexchange.com/q/442308/35864
再次测试,发现 URL 没有最后一位也可以正常工作,并且可以缩短为
https://tex.stackexchange.com/q/442308/
确实,
35864
较长的链接中的是我的 StackExchange 用户 ID。URL 中的附加位用于跟踪WHO发布了链接,SE 使用它来跟踪各种徽章(毫无疑问还用于其他内部数据收集)。当您操作 URL 时,必须检查它是否仍然有效。最好(无论您是否修改了 URL)检查几天后 URL 是否仍然有效,甚至可以使用不同的浏览器检查,以确保您获得的链接不是一次性或有时间限制的 URL。
biblatex
为您提供了对参考书目中 URL 断行的更精细控制。(这也可能意味着您找到的某些断行 URL 方法可能不适用于biblatex
。)您可以更改计数器 和 的值biburlnumpenalty
,biburlucpenalty
以biburllcpenalty
分别允许在数字、大写字母和小写字母后断行。请参阅biblatex 书目中的长 URL 的换行符?举个好例子,使用 biblatex 进行 URL 换行有关背景信息,更多信息请访问(另一个)参考书目中的 URL 连字符问题,避免 URL 不雅分割。最近,
biblatex
引入了在字符之间添加小的可拉伸空间以改善换行的可能性。参见尽管使用了 biburllcpenalty,BibLaTeX 长 URL 仍延伸到边框(和https://github.com/plk/biblatex/issues/850)。如果你不想
biburlnumpenalty
自己修改 etc. 的值,只想让所有 URL 都中断,你可以加载xurl
包。如果你xurl
在之后加载biblatex
它,它还会自动影响用 排版的书目biblatex
。
ISBN 和其他长数字
未加连字符的 ISBN 和长电子页码/文章标识符也可能导致换行问题,因为 LaTeX 不会对数字进行连字符/断开。
ISBN 通常可以用连字符分隔成块,而 LaTeX 允许在这些连字符后换行,因此建议使用带连字符的 ISBN 形式。如果您不想手动添加所有必需的连字符,并且您的参考书目管理器/工具无法自动为您完成此操作,Biber 的--isbn-normalise
选项可以提供帮助。请参阅自动验证和格式化 ISBN(和BibLaTeX 书目中的某些行没有被破坏)。
对于其他数字,可能必须调整字段格式以引入类似的seqsplit
命令\seqsplit
:参考书目中的行太长,不是 URL,需要换行。
棘手的词语(例如技术术语、专有名词)
有时 TeX 根本不知道如何用连字符连接您引用的作品标题中的某些技术术语或专有名词。(地理名称可能特别棘手。)如果 TeX 没有像这样在单词旁边换行,您可能需要检查 TeX 是否知道如何用\showhyphens
(显示特定单词的连字选项): 只需编写\showhyphens{<word>}
并检查.log
文件,看看 TeX 是否可以对单词进行连字符处理。如果可以,您应该-
在可能的断点处看到 s。如果没有可能的断点,您可以手动在本地\-
或全局引入它们,例如在行末断词. 美式英语的已知连字例外列表可在 CTAN 上找到,网址为hyphenex
。
带连字符的单词
包含连字符的单词是一种特殊情况:TeX 只会在连字符处断开包含连字符的单词,而不会在其他地方断开。可能的解决方法在对已包含连字符的单词进行充分连字符连接和https://stackoverflow.com/q/2193307。
日期
这里的具体问题是,整个日期“22. 06. 2018”(以及后面的“].”)是一个不可拆分的单元。该单元太长,无法放入第一行,但如果将其全部放入第二行,第一行的内容就会太稀疏,不符合 TeX 的喜好。这里的一个可能的解决方案是允许日期拆分为
\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}}}}}
但当然,这只适用于这种特殊情况,并且跨行显示日期可能是不可取的(毕竟默认使用不间断日期是有原因的)。
常规解决方案
在我们继续之前,如果您使用的是 pdfLaTeX(即当您使用 XeLaTeX 或 LuaLaTeX 时),您肯定希望加载德语文本,\usepackage[T1]{fontenc}
以便正确使用包含变音符号和其他重音字符的单词进行连字。此外,您可能还需要考虑\usepackage{lmodern}
以便正确使用包含变音符号和其他重音字符的单词。此外,您可能还想考虑使用默认的标准计算机欧洲字体,参见。拉丁现代与 cm-super?。
对于更通用的解决方案,您可以尝试(按效果大小的顺序增加,并可能按可取性的顺序减少)
加载
microtype
。该软件包允许使用某些微排版功能,从而大大改善换行。当然微排版不能解决所有问题(尤其是大的) 问题。这里没用,不可破坏的块太大了。虽然
microtype
这里没有解决问题,但它带来了一点改进:最初整个2018年]。突出到边缘,现在2在文本区域内,并且只有018]。导致框架崩溃。你可以增加
\emergencystretch
,看看\fussy、\sloppy、\emergencystretch、\tolerance、\hbadness 是什么意思?和参考书目中的 URL 换行,如何使用 \sloppy 获取一些参考?. 在示例中\begingroup \setlength{\emergencystretch}{.5em} \printbibliography \endgroup
有效。但该值可能需要针对其他情况进行调整,并且需要通过反复尝试才能找到。太高的值可能会导致不愉快的结果。
您可以使用
\appto\bibfont{\setlength{\emergencystretch}{.5em}}
\emergencystretch
如果您想将其应用于所有参考书目,请在序言中。其优点在于
\emergencystretch
它不会影响“好”段落的换行,即那些已经正确断行和连字的段落(根据 TeX 的理解)。使用选项
block=space
。这会在参考书目中每个逻辑块后放置一个稍大的空间。该空间可以增大和缩小,从而影响换行。这恰好在这里起作用,因为使第一行对 TeX 来说“足够完整”所需的空间不是很大。
输出
block=space
和\emergencystretch
解决方案之间存在细微的差异。如果你仔细观察,你会发现并非所有空格的长度都相同block=space
- 只有“块”(参考书目驱动程序定义的单元)之间的空格比平时延伸得更远。\emergencystretch
所有空格都均匀延伸。用于参考书目,另请
\RaggedRight
参阅ragged2e
有没有什么技巧可以美化参考书目?。\usepackage{ragged2e} ... \begingroup \RaggedRight \printbibliography \endgroup
可以通过以下方式
\emergencystretch
\RaggedRight
添加到序言中的书目字体设置中\appto\bibfont{\RaggedRight}
以防它应该全局应用于所有书目。
请注意,这会将参考书目排版为左对齐(用 Word 语言来说),不再对齐。请注意行尾与页边距的框架不相交。本例中两条行尾似乎对齐,但一般来说,这种情况不需要也不会发生。
biblatex
使用block=ragged
选项加载\RaggedRight
这比左对齐更为激进。
完整的 MWE,包含所有解决方案,但被注释掉
\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}
我删除了你的评论,以使我的评论更加明显,并显示%
需要避免不需要的空间的位置,请参阅行末百分号(%)有什么用?。另请注意,我删除了默认设置sortlocale=auto
,sorting=nyt
并为公司作者“LUMITOS GmbH”添加了必要的括号,请参阅在书目条目的“作者”字段中使用“公司作者”(完整拼写出姓名)。