【问题标题】:Using LaTeX, how can I have a list of references at the end of each section? [closed]使用 LaTeX,如何在每个部分的末尾列出参考文献? [关闭]
【发布时间】:2011-01-31 00:08:58
【问题描述】:

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

有没有办法做到这一点?

建议here

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

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

我的下一个问题(在我的第一个问题解决后演变而来)是在参考文献和下一部分之间没有分页符。

感谢您的帮助。

【问题讨论】:

    标签: latex bibtex bibliography


    【解决方案1】:

    除了

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

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

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

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

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

    【讨论】:

    • 我终于想通了!感谢大家。不幸的结果是我现在在每个参考文献和下一个标题之间都有一个分页符。除了 newclude 包(它似乎对我不起作用)之外,还有其他方法吗?
    • 一旦你有足够长的文档想要在每章之后放置参考文献,将你的章节分成单独的文件通常也是一个好主意。您可能还需要在每章末尾运行\bibliographystyle{<style>}\bibliography{<bib-file>}
    • @celenius:我认为你需要\include 来获得一个 .aux 文件供 bibtex 使用。我已经编辑了我的答案以包含一个可能抑制这些分页符的hack。
    • @celenius:我看了\include的定义,之前的想法行不通。我编辑了我的答案,建议您完全禁用 \clearpage,然后在需要的地方添加明确的分页符。
    • 不幸的是,这似乎也不起作用,因为当我包含代码 \let\originalclearpage=\clearpage \def\clearpage{\relax} 时我无法编译文档(我正在使用TexShop,以免影响我能做什么)
    【解决方案2】:

    如果您使用Biblatex,对于citing article titles,您可以使用它在章节或章节的末尾生成参考书目,甚至可以使用组合参考书目,将它们按章节/章节分隔。作为一个包,它旨在取代“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 的回答,我不知道您需要拆分多少文本,但通过一些实验您可以弄清楚。

    【讨论】:

    • 顺便说一句,我是 latexmk (ctan.tug.org/tex-archive/support/latexmk) 的粉丝,它会根据需要在 Latex 循环中自动运行每个需要的程序。我在论文中使用它和 biblatex,它为我省去了很多麻烦。
    • 嗯,这看起来很棒,但我无法让它工作。安装 Biblatex 后,我尝试按照上面的示例进行操作,但我不明白 \newrefsection 的位置。 (不过,这一切都非常令人兴奋 - 谢谢!)
    • @celenius:它应该紧跟在您的 \section 语句之后,而不是将整个部分包装在环境中。就个人而言,我更喜欢使用 package 选项,因为您不必担心添加所有额外的语句。
    • 我一定遗漏了一些东西 - 我已经阅读了部分文档并且可以得到 \printbibliography 工作的第一个简单示例,但是 \begin{refsection} \printbibliography \end{refsection} 不是工作。
    • 我真的不知道。尝试改用 package 选项,看看它是如何工作的。 Biblatex 仍被认为是测试版软件,因此其中可能存在一些需要解决的问题。
    【解决方案3】:

    @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{\ex​​pandafter\@noclearpage\O@@include}
    \让\O@包括\包括
    \def\include{\ex​​pandafter\@noclearpage\O@include}
    \makeatother

    基本上,我们对 \include 宏执行手术以删除所有 \clearpage 实例,但如您所见,最干净的方法仍然是真的脏。这非常脆弱,可能只适用于article 类,所以如果你使用不同的\documentclass,你就不走运了。我基本上是通过启用\tracingcommands=1\tracingmacros=1 并为\clearpage grepping .log 文件来得出这一点的,这样我就可以破解在它之前调用的任何内容以插入\@noclearpage

    我不推荐这个解决方案 - 最好研究 chapterbib 的工作原理并以正确的方式修复它,而不依赖于 \include 和它生成的单独的 .aux 文件......但是我很肯定这将是一项相当艰巨的任务。我想另一种解决方法是编写一个命令来模拟\include 分解.aux 文件,而不实际执行包含...


    编辑:好的,这是一个快速的
    \makeatletter
    \新环境{辅助文件}[1]{\放松
      \ifnum\@auxout=\@partaux
        \@latex@error{auxfile 环境不能嵌套或\string\include d}
        \@eha
      \else\@changeaux{#1}\fi
    }{\立即\closeout\@partaux\let\@auxout\@mainaux}
    \def\@changeaux#1{%
      \立即\写入\@mainaux{\string\@input{#1.aux}}%
      \let\@auxout\@partaux
      \立即\开放\@partaux#1.aux%
      \立即\写\@partaux{\放松}}
    \makeatother

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

    【讨论】:

    • 哇!感谢那;它是什么,我该怎么办?我试着把它放在主要的序言和章节的开头。
    • 这只是定义了一个环境——你可以把\newenvironment定义在你的主要序言中,然后使用\begin{auxfile}{sec1}...\bibliographystyle{...}\bibliography{...}\end{auxfile}封装需要有自己的围兜的部分,而不是使用@987654341 @.
    • 不幸的是,它不适用于多个部分。我试了一节,还不错;对于第二部分,编译器说存在非法错误。 “一个 1 级辅助文件:test.aux 非法,另一个 \bibstyle 命令---文件 test.aux 的第 5 行:\bibstyle : {chicago} 我正在跳过这个命令非法的任何剩余部分,另一个 \bibdata 命令 - --line 6 of file test.aux : \bibdata : {refs} 我跳过了这个命令数据库文件 #1 的任何剩余部分:refs.bib
    • 不完全确定您的上下文是什么 - 谁在给出错误?我会假设它是bibtex。您需要在辅助基本名称上运行 bibtex,而不是主要名称。也就是说,如果您有生成 sec1.aux 和 sec2.aux 的 main.tex,请运行 bibtex sec1bibtex sec2not bibtex main
    • 当我现在使用它时,它确实可以工作(每节单独引用 - 非常好!),但是在每组引用之后我仍然得到分页符。
    【解决方案4】:

    我没有尝试过,但我读到它表明:

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

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

    【讨论】:

    • 谢谢 - 我现在明白可选参数是什么了。我按两种顺序都试过了,不幸的是它给出了相同的结果(在每个部分之后列出所有参考,而不是使用的特定参考)。
    • natbib 文档以任意顺序声称这些工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2021-05-25
    • 2019-08-14
    • 2018-09-05
    相关资源
    最近更新 更多