对于一项研究,我必须使用精确的书目格式,这迫使我在书籍出版的最后一年和当前年份之后写下第一的方括号中为出版年份,上标为版本号。例如,
A. Gomme,《修昔底德的历史评述》,伦敦:牛津大学出版社,1972 年 [1956 4 ]
这意味着这本书的最后一个版本是 1972 年出版的,第一版出版于 1956 年,从那时起,又出版了 4 个版本。
我最初的想法是简单地在.bib
文件中写入year={{1972 [1956^4]}}
。问题是,当我引用这本书时,我希望只打印当前年份(因此,在这个例子中,结果应该只是Gomme 1972
,并且不是 Gomme 1972 [1956⁴]
所以这不管用。有什么想法吗?
MWEB:
\documentclass{article}
\usepackage[
citestyle=authoryear-ibid,
bibstyle=authortitle,
]{biblatex}
\addbibresource{bibliography.bib}
\begin{filecontents}{bibliography.bib}
@book{Gomme1956,
title={An Historical Commentary on Thucydides},
author={Gomme, A.},
year={1972},
publisher={OUP Oxford},
address={London},
edition={2},
origdate={1956}
}
\end{filecontents}
\begin{document}
\cite{Gomme1956}
\printbibliography
\end{document}
编辑:正如 Seamus 所建议的,我应该使用origdate
和edition
字段。但是,我不知道如何以正确的方式对它们进行样式化,以便得到结果1972 [1956⁴]
。
答案1
这里有一个 MWE 可供参考。我定义了新字段totaleditions
,该字段被映射usera
到新宏中以供使用。如果字段不为空,则totaleditions
在末尾使用此宏。publisher+location+date macro
origdate
\documentclass{article}
\usepackage[
bibstyle=authortitle,
citestyle=authoryear-ibid,
]{biblatex}
\addbibresource{bibliography.bib}
\begin{filecontents}[overwrite]{bibliography.bib}
@book{Gomme1956,
title={An Historical Commentary on Thucydides},
author={Gomme, A.},
date={1972},
publisher={OUP Oxford},
location={London},
totaleditions={4},
origdate={1956}
}
\end{filecontents}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=totaleditions, fieldtarget=usera]
}
}
}
\newbibmacro*{totaleditions}{%
\iffieldundef{origyear}{}{%
\printtext[brackets]{\printfield{origyear}%
\textsuperscript{\printfield{usera}}}
}
}
\renewbibmacro*{publisher+location+date}{%
\printlist{location}%
\iflistundef{publisher}
{\setunit*{\addcomma\space}}
{\setunit*{\addcolon\space}}%
\printlist{publisher}%
\setunit*{\addcomma\space}%
\usebibmacro{date}%
\setunit*{\addspace}%
\usebibmacro{totaleditions}%
\newunit}
\begin{document}
\cite{Gomme1956}
\printbibliography
\end{document}