Biblatex:引用复杂嵌套的未发表资料

Biblatex:引用复杂嵌套的未发表资料

我正在撰写家谱文献并编制参考书目。

我使用的一些源被封装在“包”中。例如:

管辖范围名称,第 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}

相关内容