当将条目类型与 BibLaTeX 中的 authoryear 样式结合使用时@set
,我得到了意想不到的结果。集合中的每个条目并没有给出正确的年份,而是重复了主条目的年份。
一个例子更好地解释了这一点:
\begin{filecontents*}{\jobname.bib}
@SET{set,
entryset = {original,translation}
}
@ARTICLE{original,
author = {Author, A.},
journal = {Journal de France},
year = {1999}
}
@ARTICLE{translation,
author = {Author, A.},
journal = {American Journal},
year = {2000},
translator = {Traducteur, T.}
}
\end{filecontents*}
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{set}
\printbibliography
\end{document}
我原本以为 1999 年第二次出现会变成 2000 年……或者,书目样式会在后续的集合条目中发生变化。有人能向我澄清这一点或提出解决方法吗?
答案1
您可能应该使用related
和relatedtype
字段而不是@set
条目类型。默认情况下定义了一个relatedtype
称为bytranslator
。但是,它旨在与@book
条目结合使用,而不是@article
像您的情况那样与条目结合使用。但您仍然可以定义自己的条目,relatedtype
如下例所示:
\begin{filecontents*}{\jobname.bib}
@ARTICLE{original,
author = {Auteur, A.},
journal = {Journal de France},
year = {1999},
title = {Always English},
related = {translation},
relatedtype = {articletranslatedin}
}
@ARTICLE{translation,
author = {Author, A.},
journal = {American Journal},
year = {2000},
title = {Always English},
translator = {Traducteur, T.}
}
\end{filecontents*}
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\makeatletter
%% Here we basically just re-use code from different places in BibLaTeX
\newbibmacro*{related:articletranslatedin}[1]{%
\entrydata{#1}{%
\renewbibmacro*{name:hook}[1]{%
\ifnumequal{\value{listcount}}{1}
{\begingroup
\mkrelatedstring%
\lbx@initnamehook{#1}%
\endgroup}
{}}%
\usebibmacro{byeditor+others}%
\newunit\newblock
\usebibmacro{in:}%
\usebibmacro{journal+issuetitle}%
\setunit{\addspace}%
\printtext[parens]{\printdate}
\newunit
\usebibmacro{note+pages}%
\newunit\newblock
\iftoggle{bbx:isbn}
{\printfield{issn}}
{}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
}}
\makeatother
\begin{document}
\nocite{original}
\printbibliography
\end{document}
但要小心这个例子。它的可移植性不强,并且需要以下内容:
- 两个条目中的应该
author
相同。因此在相关文章中省略了它。我们不检查不同的名称。 - 预计
title
也应相同,并且第二个条目被省略。