![多语言书目超出页边距](https://linux22.com/image/323391/%E5%A4%9A%E8%AF%AD%E8%A8%80%E4%B9%A6%E7%9B%AE%E8%B6%85%E5%87%BA%E9%A1%B5%E8%BE%B9%E8%B7%9D.png)
我在 BibLaTeX 书目中使用了多种语言的资料(本例中是法语和英语)。我的文档的主要语言是英语。
在这种情况下,法语参考文献会超出页边距,尽管我langid
在 bib 文件中指定了该参数。下面是此行为的屏幕截图。
看来,如果我将法语设置为文档的主要语言,问题就得到了部分解决:标题可以正确显示,但链接仍然超出页边距。这就是我认为它与我的参考书目条目的语言相关的原因。
您知道如何使我的参考书目条目保持在边距内,并使英语成为我的文档的主要语言吗?
以下是 MWE:
\documentclass[11pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb, main=english]{babel}
\usepackage[autostyle=true]{csquotes}
\usepackage[style=numeric, backend=biber, maxbibnames=10, sorting=nyt, autolang=hyphen]{biblatex}
\usepackage[top=2.2cm, bottom=2.5cm, left=2cm, right=2cm]{geometry}
\addbibresource{db.bib}
\DeclareFieldFormat{url}{\newline\url{#1}}
\DeclareFieldFormat{urldate}{\addcomma\space\bibstring{urlseen}\space#1}
\DefineBibliographyStrings{english}{
urlseen = {consulted on},
}
\begin{document}
Let's cite them all: \cite{ITU_climate} and \cite{ITU_2005}.
\printbibliography
\end{document}
我的 bib 文件:
@online{ITU_climate,
langid = {french},
author = {{International Telecommunication Union}},
title = {Rôle des télécommunications/technologies de l'information et de la communication en ce qui concerne les changements climatiques et la protection de l'environnement},
year = {2010},
url = {https://itunews.itu.int/fr/1794-Role-des-telecommunicationstechnologies-de-linformation-et-de-la-communication-en-ce-qui-concerne-les-changements-climatiques-et-la-protection-de-lenv.note.aspx},
urldate = {2015-21-11}
}
@online{ITU_2005,
langid = {english},
langidopts = {variant=british},
author = {{International Telecommunication Union}},
title = {Twenty Years of Measuring the Missing Link},
year = {2005},
month = {Oct.},
url = {http://www.itu.int/osg/spu/sfo/missinglink/kelly-20-years.pdf},
urldate = {2015-21-11}
}
答案1
据我所知,这里真正的问题是环境hyphenrules
无法处理带有特殊字符的单词中断。
这babel
文档说
环境
hyphenrules
可用于仅选择要使用的连字规则(也可以用作命令)。[...] 除了[...]简单用途外,hyphenrules
不鼓励使用,而建议使用(带星号的版本),因为前者没有考虑到编码或字符的可能变化,otherlanguage*
就像’
某些语言所做的那样(例如italian
,,,)。frenchb
ukraineb
所以问题在于l'information
和l'environnement
中没有连字符hyphenrules
。
第一次尝试可以是microtype
包裹。它能帮助解决很多麻烦,但并非能解决所有麻烦。
如果您使用autolang=other
或设置frenchb
为主文档语言,连字符就可以正常工作。
这两种情况都有你可能想要避免的额外影响,在这种情况下,你可以自己手动提供正确的断点
@online{ITU_climate,
langid = {french},
author = {{International Telecommunication Union}},
title = {Rôle des télécommunications/technologies de l'in\-for\-ma\-tion et de la communication en ce qui concerne les changements climatiques et la protection de l'en\-vi\-ron\-ne\-ment},
year = {2010},
url = {https://itunews.itu.int/fr/1794-Role-des-telecommunicationstechnologies-de-linformation-et-de-la-communication-en-ce-qui-concerne-les-changements-climatiques-et-la-protection-de-lenv.note.aspx},
urldate = {2015-21-11},
}
或者,我们可以定义一个撇号,这样单词之间的分隔符仍然可以
\def\apost{'\nobreak\hspace{0pt}}
并用它来代替'
@online{ITU_climate,
langid = {french},
author = {{International Telecommunication Union}},
title = {Rôle des télécommunications/technologies de l\apost information et de la communication en ce qui concerne les changements climatiques et la protection de l\apost environnement},
year = {2010},
url = {https://itunews.itu.int/fr/1794-Role-des-telecommunicationstechnologies-de-linformation-et-de-la-communication-en-ce-qui-concerne-les-changements-climatiques-et-la-protection-de-lenv.note.aspx},
urldate = {2015-21-11},
}
答案2
最后,每个参考书目都有两个问题:正确的连字符和(长)url 的断开。
因为参考书目不是像文档中的文本那样要阅读的文本,所以没有必要在参考书目和文本中使用相同的理由。
在参考书目中仅使用左对齐的优点是,LaTeX 能够更好地分行(而不会超出边距)...
最后,您应该添加包microtype
,hyphens
为包添加选项url
(更好地打破 URL),并使用命令\raggedright
使参考书目左对齐。
完整代码(查看标有 的更改<=================
):
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@online{ITU_climate,
langid = {french},
author = {{International Telecommunication Union}},
title = {Rôle des télécommunications/technologies de l'information et de la communication en ce qui concerne les changements climatiques et la protection de l'environnement},
year = {2010},
url = {https://itunews.itu.int/fr/1794-Role-des-telecommunicationstechnologies-de-linformation-et-de-la-communication-en-ce-qui-concerne-les-changements-climatiques-et-la-protection-de-lenv.note.aspx},
urldate = {2015-21-11},
}
@online{ITU_2005,
langid = {english},
langidopts = {variant=british},
author = {{International Telecommunication Union}},
title = {Twenty Years of Measuring the Missing Link},
year = {2005},
month = {Oct.},
url = {http://www.itu.int/osg/spu/sfo/missinglink/kelly-20-years.pdf},
urldate = {2015-21-11},
}
\end{filecontents*}
\documentclass[11pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[frenchb, main=english]{babel} % frenchb
\usepackage{microtype} % <==============================================
\usepackage[hyphens]{url} % <===========================================
\usepackage{showframe} % <========================== to show typing area
\usepackage[autostyle=true]{csquotes}
\usepackage[top=2.2cm, bottom=2.5cm, left=2cm, right=2cm]{geometry}
\usepackage[%
style=numeric,
backend=biber,
maxbibnames=10,
sorting=nyt,
autolang=hyphen,
]{biblatex}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{url}{\newline\url{#1}}
\DeclareFieldFormat{urldate}{\addcomma\space\bibstring{urlseen}\space#1}
\DefineBibliographyStrings{english}{%
urlseen = {consulted on},
}
\begin{document}
Let's cite them all: \cite{ITU_climate} and \cite{ITU_2005}.
Let's cite them all, let's cite them all, let's cite them all, let's
cite them all, let's cite them all, let's cite them all, let's cite them
all, let's cite them all, let's cite them all, let's cite them all,
let's cite them all, let's cite them all, let's cite them all, let's
cite them all, let's cite them all, let's cite them all, let's cite them
all.
{\raggedright % <================================== only left justified!
\printbibliography
} % <============================================== ends left justifing!
\end{document}
结果:
我使用 packageshowframe
标记打字区域和边距,使用 packagefilecontents
将bib
文件包含到 MWE 中。使用texdoc showframe
和阅读文档texdoc filecontents
。