我在正确列出参考书目方面遇到了很多麻烦,所以也许你们中的一个人可以帮助我找到方法。我的想法是在每章末尾列出单独的参考书目,并满足以下要求:
- 条目编号以 [1] 开头。
- 条目按照出现的顺序排序。
- 同一条目可能出现在不同的章节中;在这种情况下,同一条目的每个实例必须根据其出现的顺序具有不同的编号。
此外,文档末尾还必须有另一个具有一些不同特征的参考书目:
- 条目按作者姓名的字母顺序排列。
- 文档中引用的所有条目都必须出现在此参考书目中。
- 必须包含引用该条目的页码(例如“在第 XX 页引用”)。
- 此参考书目必须出现在目录中。
我正在使用biblatex
,到目前为止,我无法在每一章中获得正确的引用编号(如果某个作品之前已在另一章中引用过,尽管我设置了,它仍会保留其参考编号resetnumbers=true
),而且我无法更改样式以摆脱最后参考书目中的数字。
我的最小工作示例如下:
\begin{filecontents*}{references.bib}
@article{ref1,
title = {An experimental study},
year = {2000},
author = {Smith, M}
}
@article{ref2,
title = {Analysis of topics},
year = {2005},
author = {Johnson, B}
}
@article{ref3,
title = {Methodological review},
year = {2010},
author = {Thompson, R}
}
\end{filecontents*}
\documentclass{book}
\usepackage[bibstyle=ieee,refsegment=chapter]{biblatex}
\addbibresource{references.bib}
\begin{document}
\tableofcontents
\chapter{First chapter}
\cite{ref1} is a new reference and \cite{ref2} as well.
\printbibliography[segment=\therefsegment,heading=subbibliography,resetnumbers=true]
\chapter{Second chapter}
\cite{ref3} is again a new reference that must be numbered as one, while \cite{ref1} first appeared with number one in the previous chapter. Now it must show the number two in the following bibliography.
\printbibliography[segment=\therefsegment,heading=subbibliography,resetnumbers=true]
\printbibliography[heading=bibintoc,sorting=nty]
\end{document}
多谢!!
答案1
不幸的是,biblatex
据我所知,无法立即实现这一点,因此需要进行一些黑客攻击。以下是我所做的:
使用
refsection
而不是refsegment
使参考书目完全独立于每一章。这会带来一个不幸的后果,即biblatex
完全忘记了前几章的参考资料。为了打印最终的参考书目,我必须引入另一个 refsection(因此有该
\newrefsection
命令),并使用\nocite{}
来包含所有章节的所有引用。由于手动维护此参考列表容易出错,我(根据评论中的建议)在 cite key 钩子中添加了一些代码,以将当前标签附加到全局参考列表中,然后我使用此列表作为 的参数\nocite
。为了抑制最终参考书目中的编号,我使用了答案从这个问题并创建了一个从 authortitle 样式文件复制的特殊环境。
另一个是修补主参考书目中反向引用的内部
biblatex
命令的相当肮脏的伎俩。它保存当前引用部分和一些其他信息以启用反向引用。因此,我需要它存储最后一个引用部分而不是当前引用部分,而新命令又将保存该引用部分。由于参考部分是最后一个部分,我必须将其存储到文件中。这可能需要 LaTeX 进行一次额外的处理。\bbl@addbackref@i
\saverefsection
.aux
最后一件事是
sorting
不再受支持\printbibliography
,因此\newrefcontext
。
最终的代码是:
\begin{filecontents*}{references.bib}
@article{ref1,
title = {An experimental study},
year = {2000},
author = {Smith, M}
}
@article{ref2,
title = {Analysis of topics},
year = {2005},
author = {Johnson, B}
}
@article{ref3,
title = {Methodological review},
year = {2010},
author = {Thompson, R}
}
\end{filecontents*}
\documentclass[openany]{book}
\usepackage[bibstyle=ieee,refsection=chapter,backref=true]{biblatex}
\addbibresource{references.bib}
\newcommand\ReferencesList{}
\newcommand\AddtoRefsList[1]{\xdef\ReferencesList{\ReferencesList,#1}}
\AtEveryCitekey{\AddtoRefsList{\thefield{entrykey}}}
% The following definition is copied from authortitle.bbx/authoryear.bbx
\defbibenvironment{nolabelbib}
{\list
{}
{\setlength{\leftmargin}{\bibhang}%
\setlength{\itemindent}{-\leftmargin}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}}
{\endlist}
{\item}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\blx@addbackref@i}{\c@refsection}{\c@savedrefsection}{}{}
\newcounter{savedrefsection}
\newcommand\saverefsection{%
\protected@write\@mainaux{}{\string\setcounter{savedrefsection}{\the\c@refsection}}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{First chapter}
\cite{ref1} is a new reference and \cite{ref2} as well.
\printbibliography[heading=subbibliography]
\chapter{Second chapter}
\cite{ref3} is again a new reference that must be numbered as one, while \cite{ref1} first appeared with number one in the previous chapter. Now it must show the number two in the following bibliography.
\printbibliography[heading=subbibliography]
\newrefsection
\saverefsection
\newrefcontext[sorting=nty]
\nocite{\ReferencesList}
\printbibliography[env=nolabelbib,heading=bibintoc]
\end{document}