防止书目项目中出现分页符

防止书目项目中出现分页符

使用 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。因此,为了包装整个\bibitems,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不允许在条目中分页。

相关内容