使用 Bibtex 和 Natbib,有人知道如何防止是否在项目中途发生分页?
我希望参考书目符合以下任一要求:
- 将整个记录放在给定页面上,或
- 将记录转到下一页。
我不希望参考书目:
- 在实际记录的中途中断记录,以便该部分在一页上,另一部分在下一页上。
我的书目有 6 页以上的记录,所以我说的是中间的中断个人记录,而不是通过实际的书目,这是不可避免的,也是完全没问题的。
我的书目处于多列环境中,示例如下:
在上图中,您可以看到项目 186 和 212 尚未完成,因此,希望它们分别从下一列和下一页开始。
MWE 的参考书目如下:
\bibliographystyle{BSTFILE} %my style file.
\newcommand*{\doi}[1]{\href{http://dx.doi.org/\detokenize{#1}}{\raggedright\mybibdoicolor{DOI: \detokenize{#1}}}} %format DOI's
\setlength{\bibsep}{0.0pt} %separation
\def\mybibfontsize{\small} %fontsize
\def\mybibnumbercolor{gray} %define number color
\renewcommand{\bibnumfmt}[1]{\color{\mybibnumbercolor}[\textbf{#1}]} %change color of number
\addcontentsline{toc}{chapter}{References} %add to toc
\begin{multicols}{2}{
\mybibfontsize\bibliography{BIBLIOGRAPHY}
}
\end{multicols}
答案1
通常,bst
文件为各种条目类型提供定义,其中第一个调用是函数output.bibitem
,最后一个调用是函数fin.entry
。因此,为了包装整个\bibitem
s,minipage
我们可以向这些函数添加钩子。下面的代码说明了这些变化。
FUNCTION {output.bibitem}
{ newline$
"\begin{minipage}{\textwidth}" write$
newline$
"\bibitem[{" write$
label write$
")" make.full.names duplicate$ short.list =
{ pop$ }
{ * }
if$
"}]{" * write$
cite$ write$
"}" write$
newline$
""
before.all 'output.state :=
}
FUNCTION {fin.entry}
{ add.period$
write$
newline$
"\end{minipage}" write$
newline$
}
我们引入了
newline$
"\begin{minipage}{\textwidth}" write$
output.bibitem
在函数的开头
"\end{minipage}" write$
newline$
在函数的末尾fin.entry
。
答案2
最简单的方法是使用以下命令在本地增加参考书目的行间惩罚:
\makeatletter
\interlinepenalty=10000
\bibliography{library}
\bibliographystyle{style.bst}
\makeatother
答案3
实现(大部分)目标的一种方法是修改环境thebibliography
以禁止印刷孤行和寡行。默认情况下,“寡行”和“孤行”(TeX 术语:“俱乐部”)惩罚参数4000
在书目环境中设置为值。通过将相应参数设置为10000
(TeX 惩罚参数的最大有意义值),您基本上可以禁止出现“寡行”和“孤行”。顺便说一句,如果您采用这种方法,我建议也使用指令\raggedbottom
,否则连续 bib 条目之间的空白可能会变得过大。
请注意,这种方法将防止跨度较大的参考书目项目出现分页符三个或更少行。它仍然允许输入四个或以上跨页换行——只要第一部分和第二部分各有至少两行即可。这种方法似乎是 (i) 希望将每个书目信息保持在一页上和 (ii) 希望将文本块的高度保持在各列和各页之间合理统一的合理折衷。希望您的大多数书目条目跨越三行或更少的行——这样就不会再跨页和/或跨列换行了。
\documentclass{article}
\usepackage{etoolbox}
\patchcmd{\thebibliography}{\clubpenalty4000}{\clubpenalty10000}{}{}
\patchcmd{\thebibliography}{\widowpenalty4000}{\clubpenalty10000}{}{}
% rest of preamble
\begin{document}
% the document itself
\clearpage
\raggedbottom
\bibliography{<mybibfile(s)>}
\end{document}
答案4
block
另一个简单的解决方案是,当您使用该biblatex
包来编写参考书目时,更改设置。该选项block=nbpar
不允许在条目中分页。