我想要的是以下内容:
我有一个包含多个 的 tex 文件\sections
,每个文件末尾都有自己的参考书目和自己的 bib 文件。在每个部分中,bib 文件的几个条目都是\cited
,但我还在每个部分的末尾显示了所有本地参考书目条目。
文件末尾是一个全局参考书目,其中显示了所有本地参考书目的所有条目。
我已经尝试了不同的软件包,例如bibunits
和chapterbib
(可以找到两者的链接这里)问题不在于在一个文档中生成多个书目,而在于标签。
本地书目条目的标签有与全局书目中的相同。我尝试的软件包确实向我显示了本地和全局书目,但使用不同的标签。最后一部分让我感到困惑,因为文档中bibunits
谈到了一个labelstoglobalaux
应该这样做的选项。
顺便提一下,我使用带有 alpha.bst 标签的修改后的 plainnat.bst,即条目用作者姓名首字母和年份标记,而具有相同作者和年份的条目会在标签中添加一个字符。(在 MWE 中我使用 alpha.bst)我不想要编号标签。
这是我的 MWE 与bibunit
包:
\documentclass{article}
\usepackage[utf8]{inputenc} % Umlaut etc.
\usepackage{amssymb}
\usepackage{hyperref} % Link
\usepackage[labelstoglobalaux,globalcitecopy]{bibunits} % seperate bibliographies
\begin{document}
\nocite{*} % to cite global bibliography
% local bibliographies
\begin{bibunit}[alpha]
\nocite{*}
\putbib[biblio-test1]
\end{bibunit}
\begin{bibunit}[alpha]
\nocite{*}
\putbib[biblio-test2]
\end{bibunit}
% global bibliography
\bibliographystyle{alpha}
\bibliography{biblio-test_all}
\end{document}
以及三个 bib 文件
书目测试1:
@phdthesis{222,
author = {Author, Frank},
title = {{A long title: Number 2}},
school = {University T},
year = {2011},
pages = {III, 193},
type={Dissertation},
}
@phdthesis{333,
author = {Author, Frank},
title = {{A long title: number 3}},
school = {University T},
year = {2011},
pages = {93},
type={Dissertation},
}
@inproceedings{123,
author = {Bauthor, Bauth and Cauthor, Cauth},
title = {{This is the title}},
series = {A lovely series},
volume = {109},
booktitle = {A Long booktitel},
editor = {Editor, Ed and Beditor, Bed},
publisher = {Big Publisher},
address = {City},
year = {2010},
pages = {746--851},
}
书目测试2:
@book{573,
author = {Name, N.},
title = {{An introduction to something interesting}},
pages = {9},
publisher = {Big important company},
address = {Hillcity},
year = {2005},
series = {Lecture notes},
volume = {27/2005},
url = {http://www.google.com/doodles/},
}
@phdthesis{222,
author = {Author, Frank},
title = {{A long title: Number 2}},
school = {University T},
year = {2011},
pages = {III, 193},
type={Dissertation},
}
@phdthesis{111,
author = {Author, Frank},
title = {{A long title: Number 1}},
school = {University T},
year = {2011},
pages = {978},
type={Dissertation},
}
@phdthesis{233,
author = {Author, Frank},
title = {{Some other title}},
school = {University T},
year = {2009},
pages = {3},
type={Dissertation},
}
biblio-test_all 包含 biblio-test1 和 biblio-test2 的条目,没有其他条目。
我最终得到的结果:三个书目,每个书目都有本地标签,例如,entry222 在一个书目 [Aut11a] 中,而在另一个书目 [Aut11b] 中。
非常感谢您的帮助或想法!
编辑 1:我编译
- latex 书目测试
- bibtex biblio-test(获取全球书目)
- bibtex bu1
- bibtex bu2
- latex 书目测试
- latex 书目测试
编辑 2:我有几个 bib 文件,因为 bib 文件是\section
通过程序为每个生成的,每个文件最多有 100 个条目。
我可以将它们放在一个文件中,并使用 调用每个部分参考书目\nocite{...}
,然后我可以编写一个脚本,将每个部分参考书目条目复制到 中\nocite
。但是,我尝试只使用一个 bib 文件,并使用 调用我需要的那些条目\nocite*{...}
。但是:标签仍然不是全局的*。所以到目前为止,我还没有找到不使用单独文件的理由。
*当我引用 bibunit 中的条目时,引用中使用全局标签,但参考书目中使用本地标签。
答案1
这是一个biblatex
满足您主要要求的解决方案——本地书目和全局书目相结合,并带有一致的本地/全局条目标签。但是,我使用全局文件(包括特殊字段来指示条目与一个或多个部分的从属关系),而不是.bib
每个部分使用单独的文件。keywords
\documentclass{article}
\usepackage[style=alphabetic]{biblatex}
\defbibheading{subbibforsec}[\refname\ for section~\thesection]{%
\subsection*{#1}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
keywords = {foo,bar},
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02x,
keywords = {foo},
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
@misc{B02y,
keywords = {bar},
author = {Buthor, B.},
year = {2002},
title = {Bravissimo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\section{Foo}
Some text \autocite{B02x}.
\printbibliography[heading=subbibforsec,keyword=foo]
\section{Bar}
Some text \autocite{B02y}.
\printbibliography[heading=subbibforsec,keyword=bar]
\printbibliography
\end{document}
答案2
biblatex
自从 lockstep 写了他们的答案后,情况有所改善。这是另一个解决方案这不需要你修改你的.bib
文件。
简短回答
refsegment
为文档中需要单独参考书目的每个部分创建一个。然后,\printbibliography
使用 选项将其限制在相关部分[segment=<# of the relevant segment>]
。省略[segment=<#>]
打印完整参考书目的选项。使用refsegments
而不是refsection
确保在文档的各个部分中拥有一致/唯一的标签。
要创建,refsegments
请使用(结束前一个片段(如果需要)并开始一个新片段)或的全局选项(输入每个部分/章节/...)。请参阅下面的 MWE。\begin{refsegment}...\end{refsegment}
\newrefsegment
biblatex
refsegment=<part/chapter/section/subsection>
\newrefsegment
长答案
不使用refsections
(如 TeX.SE 上的大多数示例所示),“技巧”是使用refsegments
。它们正是为此目的而设计的。事实上,正如biblatex
文档中解释的那样(§3.7.5 参考书目段 - 粗体添加):
refsection
和 环境之间的区别refsegment
在于,前者创建的标签是环境本地的,而后者为段过滤器提供了目标\printbibliography
不影响标签。它们在整个文档中都是唯一的。
(换句话说:它会自动完成 lockstep 手动执行的操作)
如何创建refsegments
?
要创建refsegments
,您有三个解决方案:
refsegment
使用环境 ( )来界定相关部分\begin{refsegment}...\end{refsegment}
,- (如果需要:结束前一个片段并)用 开始一个新片段
\newrefsegment
, biblatex
或者使用refsegment
全局选项 (\usepackage[refsegment=]{biblatex})为每个部分/章节/节/小节自动启动一个新的 refsegment 。
如何打印本地书目?
要打印本地参考书目,您应该使用以下segment=<#>
选项,其中#
代表段的当前编号(如果尚未开始任何段,则为 0,第一个段后为 1 \newrefsegment
,第二个段后为 2,等等...或\therefsegment
打印当前参考段):
\printbibliography[段=1]
如何打印全球书目?
您只需省略该segment=<#>
选项(即简单\printbibliography
)。
平均能量损失
\documentclass{article}
\usepackage[%
style=alphabetic,
refsegment=section,%<-- starts a new refsegment at each \section
]{biblatex}
\defbibheading{subbibforsec}[\refname\ for section~\thesection]{\subsection*{#1}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02x,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
@misc{B02y,
author = {Buthor, B.},
year = {2002},
title = {Bravissimo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\section{Foo}
Some text \cite{A01,B02x}.
\printbibliography[%
heading=subbibforsec,
segment=\therefsegment,%<-- restrict the bibliography to the current segment
]
\section{Bar}
Some text \cite{B02y}.
\printbibliography[%
heading=subbibforsec,
segment=2,%<-- restrict the bibliography to the current segment
]
\printbibliography
\end{document}