我在 MiKTeX 中使用 XeLaTeX,还有biblatex
文献包。
我注意到我使用的参考书目集默认\printbibliography
没有设置该\sloppy
选项,在我看来这很好。
我希望能够做的是制作\sloppy
或\sloppypar
仅制作参考书目中真正需要的参考文献,也就是那些过满的记录\hbox
。我不希望它自动完成,但我还没有找到手动完成的方法。这可能吗?
答案1
我\emergencystretch
之前已经设定\printbibliography
:
\begingroup
\setlength{\emergencystretch}{8em}
\printbibliography
\endgroup
TeX\emergencystretch
仅在段落不符合通常的参数时才使用,因此这可能会解决问题。请尝试使用 的值\emergencystretch
。
答案2
正如 Ulrike Fischer 所暗示的:使用execute
特殊字段添加\sloppy
相应的参考条目。
\documentclass{article}
\usepackage{biblatex}
\newcommand*{\displayemergencystretch}{%
Emergency stretch: \the\emergencystretch
}
\renewbibmacro*{finentry}{%
\finentry
\addspace% ADDED
\printtext[brackets]{\displayemergencystretch}% ADDED
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02,
execute = {\sloppy},
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
@misc{C03,
author = {Cuthor, C.},
year = {2003},
title = {Charlie},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\sloppy
A \verb|\sloppy| paragraph~-- \displayemergencystretch
\fussy
A \verb|\fussy| paragraph~-- \displayemergencystretch
\printbibliography
\end{document}
答案3
这不是 100% 的直接答案,但由于我刚刚在参考书目中遇到了类似的问题,所以我的方法如下。它使用包ragged2e
,该包定义了一个\RaggedRight
仍然允许连字符的命令——至少对我来说至关重要的是,它在 URL 中包含连字符(使用包时url
)。我决定\RaggedRight
只对@electronic
项目启用(其主要内容是短标题和 wicked-to-linebreak url),并定义了我自己的 .bst 文件。它是从 abbrvnat.bst 复制/粘贴/修改的,以下是相关摘录:
FUNCTION {electronic}
{ output.bibitem
url empty$ 'skip$ { "\begin{FlushLeft}" write$ newline$ } if$
format.authors output
new.block
format.title "title" output.check
year empty$ month empty$ day and and
'skip$
{
new.block
format.date output
}
if$
new.block
format.url output
note empty$ 'skip$
{
new.block
note output
}
if$
fin.entry
url empty$ 'skip$ { "\end{FlushLeft}" write$ newline$ } if$
}
.bst 文件很难处理,但这段代码的结果是,如果有一个 url,然后我用一个FlushLeft
环境把条目的内容包围起来,这样就可以\RaggedRight
在这个段落上启用——而且只能在这个段落上启用。
要使用该execute
字段,正如@UlrikeFischer 建议的那样,您可以重新定义output.bibitem
并fin.entry
检查该execute
字段并将其输出:
% in output.bibitem
execute empty$ 'skip$ "\begingroup" execute * write$
% in fin.entry
execute empty$ 'skip$ "\endgroup" write$
然后您的execute
字段可以包含\RaggedRight
,您将获得与我上面的代码相同的效果,但适用于您注释的所有 .bib 项目。它不是完全自动的“溢出 hbox”解决方案,但它可能无论如何都很有用。