我正在撰写家谱文献并编制参考书目。
我使用的一些源被封装在“包”中。例如:
管辖范围名称,第 2 号箱,包含案件 100 至 199,存储在国家档案馆,内容包括:
- 案件编号123,内容如下:
- 审讯记录副本,日期为某某
- John Doe 的声明,日期等
- Jane Doe 的出生证明,需注明日期并由牧师证明姓名
- 警方报告,注明日期并签名等。
- 其他物品等
- 案件编号124,内容如下:
- 其他文件
此类来源是否有 biblatex 样式或类似样式?我更愿意将每个子来源保留在“超级来源”内,但仍然可以分别引用它们。
更新:根据以下评论,我创建了一个自定义条目类型,其中除其他外,有一个“包含”字段:
\DeclareDatamodelFields[type=list, datatype=literal]{
contains}
然后我可以使用 将其填充到我的 .bib 文件中contains = {ITEM1 and ITEM2}
。但是,我更喜欢使用逗号分隔的列表。据我所知,这是使用 完成的,[type=field, format=xsv]
但使用 会导致 biber 随后立即退出Found BibTeX data source
而不写入 .bbl 文件。
我尝试通过谷歌搜索工作示例,但没有成功......
更新:我能做的最小的工作示例:
\documentclass{article}
\usepackage{filecontents}
\usepackage{csquotes}
\begin{filecontents}{\jobname.bib}
@archivalsource{Test,
title = {Test Source},
contains = {ITEM1 and ITEM2}}
@archivalitem{ITEM1,
title = {Transcript},
author = {J. Doe}}
@archivalitem{ITEM2,
title = {Report},
author = {J. Moe}}
\end{filecontents}
\begin{filecontents}{archival.dbx}
\DeclareDatamodelFields[type=list, datatype=literal]{
contains}
\DeclareDatamodelEntryfields[archivalsource]{
title,
contains}
\DeclareDatamodelEntryfields[archivalitem]{
author,
title}
\end{filecontents}
\usepackage[datamodel=archival, backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\DeclareBibliographyDriver{archivalitem}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printnames{author} - %
\printfield{title}%
\usebibmacro{finentry}}
\DeclareListFormat{contains}{
\item \entrydata{#1}{\usedriver{}{\thefield{entrytype}}}
}
\DeclareBibliographyDriver{archivalsource}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{title}. %
\printtext{Contains:}%
\begin{enumerate}%
\printlist{contains}%
\end{enumerate}%
\iflistundef{contains}{\finentry}{}}
\begin{document}
Blah blah.\cite{Test}
\nocite{ITEM1, ITEM2} % otherwise they won't show up
\printbibliography[type=archivalsource]
\end{document}
答案1
好吧,在评论的帮助下我成功了。下面的代码呈现为:
\documentclass{article}
\usepackage{filecontents}
\usepackage{csquotes}
\begin{filecontents}{\jobname.bib}
@archivalsource{Test,
title = {Test Source},
contains = {ITEM1, ITEM2}}
@archivalitem{ITEM1,
title = {Transcript},
author = {J. Doe}}
@archivalitem{ITEM2,
title = {Report},
author = {J. Moe}}
\end{filecontents}
\begin{filecontents}{archival.dbx}
\DeclareDatamodelFields[type=field, format=xsv, datatype=entrykey]{
contains}
\DeclareDatamodelEntryfields[archivalsource]{
title,
contains}
\DeclareDatamodelEntryfields[archivalitem]{
author,
title}
\end{filecontents}
\usepackage[datamodel=archival, backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\DeclareBibliographyDriver{archivalitem}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printnames{author} - %
\printfield{title}%
\usebibmacro{finentry}}
\newcommand{\entry}[1]{
\item \entrydata{#1}{\usedriver{}{\thefield{entrytype}}}\adddot
}
\DeclareFieldFormat{contains}{
\printtext{Contains:}%
\begin{enumerate}%
\forcsvfield{\entry}{contains}
\end{enumerate}%
}
\DeclareBibliographyDriver{archivalsource}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\printfield{title}. %
\printfield{contains}%
\iflistundef{contains}{\finentry}{}}
\begin{document}
Blah blah.\cite{Test}
\nocite{ITEM1, ITEM2} % otherwise they won't show up
\printbibliography[type=archivalsource]
\end{document}