下一个 bib 条目导致参考书目中的 \hbox 不足

下一个 bib 条目导致参考书目中的 \hbox 不足

我的书目在 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 WG(将标签从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}

问题:

  1. 这是为什么?为什么第二个 bib 条目的短名称会影响第一个 bib 条目中的某些换行符?
  2. 我该如何处理?如何正确解决此 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}{}{}

相关内容