biblatex 中的相关字段:页面

biblatex 中的相关字段:页面

我想使用该biblatex包提供的“相关”字段。

但是当我阅读文档时,它意味着只使用一个输入键,而且我想要书的一部分,而不是全部书。

所以我想要精确的页面(因为我可以使用与不同条目相关的不同页面的书)。

我期望的输出是:

作者 1,标题 1,(元数据)...参见作者 2,标题 2,(元数据),第 xxx 页;作者 3,标题 3(元数据)...第 yyy 页等。

(事实上​​,它会更加复杂,但想法是一样的:链接到其他书的精确页面)我正在考虑做这样的事情:

@book{key,
     ...}
@book{key2,
     crossref={key},
     pages={xxx}
}
@book{key3,
     ...}
@book{key4,
     crossref={key2},
     pages={yyyy}
}
@book{key5,
     related={key2, key5}
...
}

但我想避免“错误”的子条目。您有什么想法吗?

答案1

好的,我找到了一种方法,我以一种简化的方式介绍它(因为它集成在一个更全球化的项目中。有关完整详细信息,请参阅https://github.com/maieul/biblatex-manuscripts-philology/commit/cc76e0cd0a7d6952d407fa83229e1baeac89a27d

首先,在 .bib 文件中,创建字段“catalog”,它将包含格式化的文本,就像cites命令的参数一样:

@type{key,
  catalog={[xx]{key1}[yy]{key2}}
  }

在您的 .dbx 文件中(参见手册),假设您想要有新字段catalog

\DeclareDatamodelFields[type=field,datatype=literal]{catalog}
\DeclareDatamodelEntryfields{catalog}

并在 bbx 文件中说明如何构造最终字段

\DeclareStyleSourcemap{
    \maps[datatype=bibtex]{
        \map[overwrite]{
        \step[fieldsource=catalog,final]
        \step[fieldset=catalog,fieldvalue={\cites}]
        \step[origfieldval,fieldset=catalog,append]
        }
  }
}

因此该字段将自动转换为

\cites[xx]{key1}[yy]{key2}

因此,最后在finentry宏中调用该字段:

\renewbibmacro{\usebibmacro{catalog}\finentry} % new finentry macro
\newbibmacro{catalog}{%
\ifbibliography{}% print the catalogs only in final bibliography
    {\finentrypunct\setunit{}\par\unspace\printfield{catalog}}}%Check the punct, add a par break
    {}%
}
\DeclareFieldFormat{catalog}{% Format of the field
  \textbf{Cat.} % Should be more clean : with language string. See my full code
  #1%
}

答案2

广告:这不是解决方案,但可以引出一个可能的解决方案。我没有足够的空间在评论中解释它,所以我(不恰当地)创建了一个答案。


也许可以使用 biber 功能来解决。我发现这个功能TeX.SE 帖子(参见已接受的答案)其中列出了 biber 的优点。这些功能之一是:

非常灵活的配置文件“sourcemap”选项,可用于在 Biber 读取 .bib 数据时对其进行更改,而无需更改实际数据源本身。您可以使用它来执行各种操作,例如删除某些字段、添加字段、有条件地删除/添加字段、使用完整的 Perl 5.14 正则表达式更改字段(请参阅 Biber 手册第 3.1.1 节)。

最后一个功能对您来说特别有趣,因为您可以在 Biber 读取纯 BibTeX .bib 文件时动态将其映射到 biblatex 模型中,而无需更改文件。它对于删除像 abstract 这样的字段也非常有用,这些字段通常会因 LaTeX 保留字符而导致麻烦。

作者参考了 biber 手册的第 3.1.1 节,但实际上相关的是第 3.1.2 节(标题为“sourcemap 选项”):

数据源驱动程序实现了从数据源条目类型和字段到 Biblatex 数据模型的映射。如果您想要覆盖或扩充驱动程序映射,可以使用 sourcemap 选项,这样就可以拥有一个具有非标准条目类型或字段的数据源,并将它们自动映射到其他条目类型/字段,而无需修改数据源。本质上,这会改变 Biber 用于构建内部 Biblatex 数据模型的源数据流,并且是 Biber 读取数据源时自动编辑数据源的一种方式。

3.1.2部分包含示例和精确的解释。

总结一下,这个想法是使用 biber 来更改参考(对于您的问题,您想添加页面提及)而无需实际上更改.bib 文件。这样,您就不必创建虚假的参考文献来获得正确的参考书目(包含相关参考文献)。

我不知道它究竟是如何工作的(而且现在也没有时间尝试)但我相信它可以解决你的问题。

答案3

我检查了该字段的所有选项related。似乎没有办法添加页面等信息相关参考。

,有一个解决方法:您可以设置relatedstring以提供此信息的方式。软件包biblatex-examples.bib随附的文件显示了此类示例。

以下是 MWE:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{filecontents}
\usepackage[style=verbose,hyperref]{biblatex}
\renewcommand*{\newunitpunct}{\addcomma\space}
\bibliography{biblio}
\begin{filecontents}{biblio.bib}
}
@Article{doody,
  author       = {Doody, Terrence},
  title        = {Hemingway's Style and Jake's Narration},
  year         = 1974,
  volume       = 4,
  number       = 3,
  pages        = {212-225},
  hyphenation  = {american},
  related      = {matuz:doody},
%  relatedstring= {\autocap{e}xcerpt in}, % this was the original example with no page mention.
  relatedstring= {cited p.42 in :}, % but you could rephrase the field like this in this line.
  journal      = {The Journal of Narrative Technique},
  annotation   = {An \texttt{article} entry cited as an excerpt from a
                  \texttt{collection} entry. Note the format of the
                  \texttt{related} and \texttt{relatedstring} fields},
}

@Collection{matuz:doody,
  editor       = {Matuz, Roger},
  title        = {Contemporary Literary Criticism},
  year         = 1990,
  volume       = 61,
  publisher    = {Gale},
  location     = {Detroit},
  pages        = {204-208},
  hyphenation  = {american},
  annotation   = {A \texttt{collection} entry providing the excerpt information
                  for the \texttt{doody} entry. Note the format of the
                  \texttt{pages} field},
}
\end{filecontents}
\begin{document}

\noindent\cite{matuz:doody}\\
\cite{doody}

\printbibliography
\end{document}

在此处输入图片描述

如果你确实需要一个页面解决方案相关的参考资料,恐怕你就得亲自动手了。

相关内容