使用LaTeX,我如何在每个部分的末尾都有一个引用列表?

时间:2010-03-23 20:55:26

标签: latex bibtex bibliography

我想为每个部分生成参考书目,并在该部分的末尾进行。当我这样做时,它会生成完整的参考书目并将其放在每个部分之后。

有没有办法可以做到这一点?

建议here

  

“chapterbib包提供了一个   选项sectionbib放置   参考文献中的\ section *而不是   \ chapter *,有意义的东西   如果每个都有参考书目   章节。此选项不起作用   当natbib也被装载;代替,   将选项添加到natbib。 “

我不明白这意味着什么,我已经尝试过我认为的选项。具体来说,“为natbib添加选项”是什么意思?

我后来的问题(在我的第一个问题解决之后发展而来)是在引用和下一部分之间没有分页。

感谢您的帮助。

4 个答案:

答案 0 :(得分:10)

除了

\usepackage[sectionbib]{natbib}
\usepackage{chapterbib}

您必须将每个部分放在一个单独的.tex文件中,然后\include。您必须分别在每个.tex文件上运行bibtex

N.B。使用\input而不是\include可以避免不必要的分页符,但它不会创建BibTeX需要完成其工作的.aux文件。我查看了\include的定义,除了完全禁用\clearpage之外,我没有看到如何禁用分页功能。你可以试试

\let\originalclearpage=\clearpage
\def\clearpage{\relax}

在您的\begin{document}之后,但您可能需要手动放入一些\originalclearpage

答案 1 :(得分:6)

如果您正在使用Biblatex,那么您可以使用它来创建章节或章节末尾的参考书目,甚至可以使用组合的参考书目,它们由章节/章节分隔。作为一个包,它旨在取代“babelbib,bibtopic,bibunits,chapterbib,cite,inlinebib,mlbib,multibib,splitbib。”

您可以使用以下三种方式之一在每个部分之后放入参考书目。首先,将您的部分文字包含在\begin{refsection} / \end{refsection}对中

\section{SomeSectionName}
\begin{refsection}
% your text goes here
\printbibliography
\end{refsection}
\section{NextSection}

其次,在每个\section语句之后,您放置一个\newrefsection语句,该语句结束上一节并开始新节。并且,您再次使用\section语句在下一个\printbibliography之前。最后,有refsection个包选项,可以将nonepartchaptersectionsubsection作为参数。要在全局参考书目中对每个部分的书目条目进行分组,请使用refsegment,使用\bibbysegment按顺序打印所有细分。 (\bibbysection也可以以相同的方式用于参考部分。)

根据@ Norman的回答,我不知道你要分割你的文本多少钱,但通过一些实验你可以弄明白。

答案 2 :(得分:2)

我没有尝试过,但正如我读到的那样:

\usepackage[sectionbib]{natbib} % Note the option in the optional argument
\usepackage{chapterbib}

虽然我只是猜测这些线的正确顺序。

答案 3 :(得分:2)

@celenius - 如果你真的想要摆脱那个分页,那么这是一个非常脏的技巧......

\makeatletter
\let\O@@input@\@input@
\def\@noclearpage{\@ifnextchar\clearpage\@gobble\relax}
\def\@input@#1{\O@@input@{#1}\@noclearpage}
\let\O@@include\@include
\def\@include{\expandafter\@noclearpage\O@@include}
\let\O@include\include
\def\include{\expandafter\@noclearpage\O@include}
\makeatother

基本上我们在\include宏上进行手术以摆脱所有\clearpage个实例,但正如你所看到的,最简洁的方法仍然是真的脏。这非常脆弱,可能只适用于article类,所以如果你使用不同的\documentclass,那你就不走运了。我基本上通过启用\tracingcommands=1\tracingmacros=1以及为.log点击\clearpage文件来获得此结果,这样我就可以在插入\@noclearpage之前修改任何被调用的内容

我不建议使用此解决方案 - 在不依赖chapterbib和单独的\include文件的情况下,查看.aux如何工作并以正确方式修复它会更好它产生......但我很肯定这将是一项非常困难的任务。我想另一个解决方法是编写一个命令来模拟\include分解.aux文件,而不实际执行包含...

<小时/> 编辑:好的,这是一个快速

\makeatletter
\newenvironment{auxfile}[1]{\relax
  \ifnum\@auxout=\@partaux
    \@latex@error{auxfile environments cannot be nested or \string\include d}
    \@eha
  \else\@changeaux{#1}\fi
}{\immediate\closeout\@partaux\let\@auxout\@mainaux}
\def\@changeaux#1{%
  \immediate\write\@mainaux{\string\@input{#1.aux}}%
  \let\@auxout\@partaux
  \immediate\openout\@partaux#1.aux%
  \immediate\write\@partaux{\relax}}
\makeatother

然后您只需插入\begin{auxfile}{foo}...\end{auxfile}即可使用foo.aux代替普通的.aux文件。这与chapterbib完全兼容。我不认为CTAN有这样的东西,所以也许我会把它作为迷你包提交。