![下一个 bib 条目导致参考书目中的 \hbox 不足](https://linux22.com/image/318661/%E4%B8%8B%E4%B8%80%E4%B8%AA%20bib%20%E6%9D%A1%E7%9B%AE%E5%AF%BC%E8%87%B4%E5%8F%82%E8%80%83%E4%B9%A6%E7%9B%AE%E4%B8%AD%E7%9A%84%20%5Chbox%20%E4%B8%8D%E8%B6%B3.png)
我的书目在 XeLaTeX 中引起以下警告:
Underfull \hbox (badness 1048) in paragraph at lines 11--16
这是由第一的bib 条目。但是,我可以通过修改第二围兜入口!
一个简单的例子是:
\documentclass{scrreprt}
\usepackage{xltxtra}
\usepackage{polyglossia}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Book1,
author = {Some Author},
title = {Some title title title title title title title title},
publisher = {Somepublisher},
year = {2000},
isbn = {978-0-12-179152-0},
url = {http://www.example.com/testtesttesttesttesttesttes},
}
@book{Book2,
author = {G and W},
year = {2008},
}
\end{filecontents}
\begin{document}
\nocite{Book1}
\nocite{Book2}
\bibliographystyle{alphadin}
\bibliography{\jobname}
\end{document}
未满的 \hbox 出现在 ISBN 部分第一的bib 条目。但是,如果我更改第二作者从G and W
到G
(将标签从GW08
到缩短G08
),警告就会消失,并且 ISBN 会以不同的方式分解。
示例 2:
\documentclass{scrreprt}
\usepackage{xltxtra}
\usepackage{polyglossia}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Book1,
author = {Some Author},
title = {Some title title title title title title title title},
publisher = {Somepublisher},
year = {2000},
isbn = {978-0-12-179152-0},
url = {http://www.example.com/testtesttesttesttesttesttes},
}
@book{Book2,
author = {G},
year = {2008},
}
\end{filecontents}
\begin{document}
\nocite{Book1}
\nocite{Book2}
\bibliographystyle{alphadin}
\bibliography{\jobname}
\end{document}
问题:
- 这是为什么?为什么第二个 bib 条目的短名称会影响第一个 bib 条目中的某些换行符?
- 我该如何处理?如何正确解决此 LaTeX 警告?
答案1
对于参考书目中的一般换行问题,biblatex
你可能会感兴趣如何调整参考书目的断行?。
正如您所注意到的,更改作者时标签也会更改。不过,更改标签可能会带来一些严重后果。这是因为参考书目是使用最长标签的长度对齐的,因此所有内容看起来都很漂亮且统一,并且没有标签突出到参考书目项目中。
在您的例子中,您有标签“Aut00”和“G08”或“GW08”。在“Aut00”和“G08”中,前者最长;但“GW08”比“Aut00”长(无论如何,在您的示例中的字体中)。因此,在一种情况下,我们使用“Aut00”来对齐条目,而在另一种情况下,我们使用“GW08”来对齐条目,从而导致边距略有不同。正是对齐中的这种微小变化使得换行算法不再想要破坏 ISBN。
您会注意到,在发生换行的情况下,行已经很满了,空格被压缩了。然后通过使用较长的标签添加边距,我们进一步减少了行中的可用空间,以至于不再可能换行。
一般来说,解决方案并不容易找到,换行很困难,但书目中的换行是出了名的困难。并非所有书目项目的内容都适合良好的连字和换行效果;换行对于大段同质流动文本非常有效,因为有很多换行的机会,但对于短小的文本,其中散布着无法换行的空格,效果就差了。
“重写段落以允许漂亮的换行”这一老把戏几乎不适用于参考书目。当然,您可以希望出现另一个更长的项目再次更改边距,也许这样另一个换行就变得可行了。
第一次尝试往往是microtype
包可以做很多事情。(它似乎也能解决 MWE 中的问题。但在某些情况下甚至microtype
无济于事。)
然后你可以尝试一下允许\emergencystretch
或者更多的,这些选项通常会通过尝试和错误临时设置。您甚至可以尝试\labelsep
暂时更改值,请参阅参考书目 - 在每个条目后增加水平空白使输出看起来正常。
最后,你可以选择将参考书目设置为右边不规则(如何防止引用的自动对齐?) 以使空间不被拉伸。
答案2
为了记录我如何解决这个问题,我申请了https://tex.stackexchange.com/a/10928并在之前添加以下命令\begin{document}
:
\apptocmd{\sloppy}{\hbadness 4000\relax}{}{}