我想使用该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}
如果你确实需要一个页面解决方案后相关的参考资料,恐怕你就得亲自动手了。