条目类型@xdata
和xdata
字段非常好,因为它们可以帮助我们尽可能地降低冗余度,例如在下面的 MCE 中,作者姓名很长且容易出错:
- 夏尔-让·艾蒂安·古斯塔夫·尼古拉斯·德·拉瓦莱·普桑
- 克努斯,唐纳德·埃尔文
虽然在多个参考文献中使用,但只写入一次(相应的作者字段保存在@xdata
spoussin
和 中knuth
)。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@xdata{poussin,
author = {de La Vallée Poussin, Charles-Jean Étienne Gustave Nicolas},
}
@xdata{knuth,
author = {Knuth, Donald Ervin},
}
@article{poussin1896a,
xdata = {poussin},
title = {Recherches analytiques de la théorie des nombres premiers},
journal = {Annales de la Société scientifique de Bruxelles},
year = {1896},
number = {20},
pages = {183-256, 281-352, 363-397}
}
@article{poussin1896b,
xdata = {poussin},
title = {Recherches analytiques de la théorie des nombres premiers},
journal = {Annales de la Société scientifique de Bruxelles},
year = {1896},
number = {21},
pages = {351-368}
}
@book{knuth1984,
xdata = {knuth},
title = {The TeXbook},
date = {1984-01-14},
publisher = {Addison-Wesley},
}
@book{knuth1986,
xdata = {knuth},
title = {TeX: The Program},
date = {1986-01-11},
publisher = {Addison-Wesley},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
到目前为止,一切都很好。
现在,假设同一篇文档包含这两位作者撰写的另一篇参考文献。虽然@xdata
支持级联条目,但添加@xdata
引用条目poussinknuth
的@xdata
条目poussin
并knuth
不会按预期工作:仅考虑最后一位作者:
@xdata{poussinknuth,
xdata = {poussin,knuth},
}
@article{poussinknuth2019,
xdata = {poussinknuth},
title = {Recherches analytiques de la théorie des nombres premiers, composé avec \TeX},
journal = {TUGboat},
year = {2019},
number = {40},
pubstate = {inpreparation}
}
好吧,这并不奇怪,因为:
@xdata{poussinknuth,
xdata = {poussin,knuth},
}
可能会做类似的事情:
@xdata{poussinknuth,
xdata = {author = {de La Vallée Poussin, Charles-Jean Étienne Gustave Nicolas},author = {Knuth, Donald Ervin}}
}
因此我的问题是: 是否有可能在biblatex
的.bib
文件中引用以下内容:
- 夏尔-让·艾蒂安·古斯塔夫·尼古拉斯·德·拉瓦莱·普桑
- 克努斯,唐纳德·埃尔文
既单独写一次,又一起写一次这些作者的名字?
答案1
我猜这里的经典方法(也适用于 BibTeX)是使用@string
s。多个@string
s 可以用 连接起来#
,所以你可以说
author = poussin # { and } # knuth,
你的例子看起来就像
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@string{poussin = {de La Vallée Poussin, Charles-Jean Étienne Gustave Nicolas}}
@string{knuth = {Knuth, Donald Ervin}}
@article{poussin1896a,
author = poussin,
title = {Recherches analytiques de la théorie des nombres premiers},
journal = {Annales de la Société scientifique de Bruxelles},
year = {1896},
number = {20},
pages = {183-256, 281-352, 363-397}
}
@article{poussin1896b,
author = poussin,
title = {Recherches analytiques de la théorie des nombres premiers},
journal = {Annales de la Société scientifique de Bruxelles},
year = {1896},
number = {21},
pages = {351-368}
}
@book{knuth1984,
author = knuth,
title = {The TeXbook},
date = {1984-01-14},
publisher = {Addison-Wesley},
}
@book{knuth1986,
author = knuth,
title = {TeX: The Program},
date = {1986-01-11},
publisher = {Addison-Wesley},
}
@article{poussinknuth2019,
author = poussin # { and } # knuth,
title = {Recherches analytiques de la théorie des nombres premiers, composé avec \TeX},
journal = {TUGboat},
year = {2019},
number = {40},
pubstate = {inpreparation}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
xdata
当你想要连接xdata
同一字段的信息时,你确实遇到了麻烦。我想解决
@xdata{poussinknuth,
xdata = {poussin,knuth},
}
除非 Biber 开始将同一字段的多个出现情况连接成一个(以正确的方式!)而不是丢弃先前的出现情况,否则这是非常不平凡的。