The biblatex
documentation states on page 14: "This [the addendum
field] is similar to the note
field except that it is printed at the end of the bibliography entry."
So instead of note
it is better to use addendum
.
biblatex-apa
automatically wraps addendum
into parentheses, so there is no need to do that manually.
NB: It is always better to let biblatex
handle such cases: It is quite tiresome to always remember to put the parentheses around the words, and what if you want to get rid of them?
So the entry in the .bib
file should look like this.
@book{habermas_structural_1989_addendum,
address = {Cambridge, {MA}},
title = {The structural transformation of the public sphere: {An} inquiry into a category of bourgeois society},
publisher = {MIT {Press}},
author = {Habermas, Jürgen},
translator = {Burger, Thomas and Lawrence, Frederick},
year = {1989},
addendum = {{Original} work published 1962}
}
If you can not be bothered to use addendum
manually, you can make biblatex
/biber
do the mapping for you.
Just add this to the preamble.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=note, final]
\step[fieldset=addendum, origfieldval, final]
\step[fieldset=note, null]
}
}
}
It will copy the note
field into the addendum
field (only if the latter one is empty), the note
field will be removed afterwards.
You can then use note
as usual.
The least convenient way is to modify all the drivers defined in apa.bbx
. Unfortunately apa.bbx
does not use any macros to print note
and addendum
, but the bare \printfield{note}
and \printfield{addendum}
.
In \DeclareBibliographyDriver{book}
we find:
...
\printfield{series}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
\usebibmacro{location+publisher}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\setunit*{\addspace}\newblock
\usebibmacro{origyear}%
\newunit\newblock
\printfield{addendum}%
\newunit\newblock
...
You could manually move all the \printfield{note}
near \printfield{addendum}
like so
...
\printfield{series}%
\newunit\newblock
\usebibmacro{location+publisher}%
\newunit\newblock
\usebibmacro{doi+eprint+url}%
\setunit*{\addspace}\newblock
\usebibmacro{origyear}%
\newunit\newblock
\printfield{addendum}%
\newunit\newblock
\printfield{note}%
\newunit\newblock
...
or you could xpatch
all the drivers via
\xpatchbibdriver{book}
{\newunit\newblock
\printfield{note}%
}
{}%
{\typeout{successfully temporarily removed note}}
{\typeout{failed to temporarily remove note}}
\xpatchbibdriver{book}
{\printfield{addendum}%
}
{\printfield{addendum}%
\newunit\newblock
\printfield{note}}%
{\typeout{successfully re-added note after addendum}}
{\typeout{failed re-add note after addendum}}
You will have to do this for all drivers though.
So you might want to wrap this into a command
\newcommand{\movenote}[1]{%
\xpatchbibdriver{#1}
{\newunit\newblock
\printfield{note}}
{}%
{\typeout{successfully temporarily removed note (in driver #1)}}
{\typeout{failed to temporarily remove note (in driver #1)}}%
\xpatchbibdriver{#1}
{\printfield{addendum}}
{\printfield{addendum}%
\newunit\newblock
\printfield{note}}%
{\typeout{successfully re-added note after addendum (in driver #1)}}
{\typeout{failed re-add note after addendum (in driver #1)}}%
}
To patch a driver, use \movenote{article}
, you can call this command for all drivers like this:
\makeatletter
\forlistloop{\movenote}{\blx@datamodel@entrytypes}
\makeatother
or
\makeatletter
\def\do#1{\movenote{#1}}
\abx@doentrytypes
\makeatother
You might want to try this slightly modified mapping command
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=reprintedfrom, fieldtarget=related, final]
\step[fieldset=relatedtype, fieldvalue={reprintfrom}]
}
}
}
It will turn the non-standard reprintedfrom={something}
into related={something}
and relatedtype={reprintfrom}
.
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{test1,
address = {Edinburgh},
title = {I and thou},
publisher = {T. \& {T}. {Clark}},
author = {Buber, Martin},
translator = {Smith, Ronald Gregor},
year = {1937},
origdate = {1923}
}
@incollection{test2,
address = {Cambridge, {MA}},
title = {Deliberation and democratic legitimacy},
booktitle = {Deliberative democracy: {Essays} on reason and politics},
publisher = {MIT {Press}},
author = {Cohen, Joshua},
editor = {Bohman, James and Rehg, William},
year = {1997},
origdate = {1989},
reprintedfrom = {test3},
pages = {67--91},
}
@book{test3,
address = {Oxford},
title = {The {Good} polity: {Normative} analysis of the state},
shorttitle = {The {Good} polity},
publisher = {Blackwell},
editor = {Hamlin, Alan P. and Pettit, Philip},
year = {1989},
pages = {17--34},% that's better than origpages in test2
}
}
\end{filecontents*}
\documentclass[a4paper]{article}
% Set the values for the bibliography
\usepackage[
style=apa,
backend=biber,
isbn=false,
url=false,
doi=false,
eprint=false,
hyperref=true,
backref=false,
firstinits=false,
]{biblatex}
% Recommended by biblatex
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage{xpatch}
% Set language
\usepackage[british]{babel}
\DeclareLanguageMapping{british}{british-apa}
\addbibresource{\jobname.bib}
\renewbibmacro*{related:reprintfrom}[1]{%
\entrydata*{#1}{%
\printtext{\mkbibemph{\printfield[apacase]{title}}}%
\setunit{\bibpagespunct}%
\printfield{pages}%
\setunit{\addcomma\addspace}%
\bibstring{byauthor}\addspace
\printnames[apanames][-\value{listtotal}]{editor}%
\ifnameundef{editor}
{}
{\addcomma\addspace
\usebibmacro{apaeditorstrg}{editor}}
\printnames[apanames][-\value{listtotal}]{author}%
\setunit{\addcomma\addspace}%
\usebibmacro{date}%
\setunit{\addcomma\addspace}%
\usebibmacro{location+publisher}%
\newunit\newblock
\usebibmacro{related}}}
\DefineBibliographyStrings{british}{
reprintfrom = {Reprinted from}
}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=reprintedfrom, fieldtarget=related, final]
\step[fieldset=relatedtype, fieldvalue={reprintfrom}]
}
}
}
\renewbibmacro*{origyear}{%
\ifboolexpr{not test {\iffieldundef{labelyear}} and not test {\iffieldsequal{labelyear}{origyear}} and not test {\iffieldequalstr{relatedtype}{reprintfrom}}}
{\printfield{origyear}}
{}}
\begin{document}
\cite{test1}
\cite{test2}
\printbibliography
\end{document}
A problem though is origpages
; the best solution is to add the contents of origpages
as pages
to the related entry as done above.
But if you cannot, for the life of you, live with changing your bibsource, this redefinition of related:reprintfrom
might be for you.
\DeclareFieldFormat{origpages}{\mkpageprefix[bookpagination]{#1}}
\renewbibmacro*{related:reprintfrom}[1]{%
\entrydata*{#1}{%
\printtext{\mkbibemph{\printfield[apacase]{title}}}}%
\setunit{\bibpagespunct}%
\printfield{origpages}%
\entrydata*{#1}{%
\setunit{\addcomma\addspace}%
\bibstring{byauthor}\addspace
\printnames[apanames][-\value{listtotal}]{editor}%
\ifnameundef{editor}
{}
{\addcomma\addspace
\usebibmacro{apaeditorstrg}{editor}}
\printnames[apanames][-\value{listtotal}]{author}%
\setunit{\addcomma\addspace}%
\usebibmacro{date}%
\setunit{\addcomma\addspace}%
\usebibmacro{location+publisher}%
\newunit\newblock
\usebibmacro{related}}}
You will have to tell biblatex
/Biber to recognise origpages
though. This can be done via
\begin{filecontents*}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field,datatype=range]{origpages}
\DeclareDatamodelEntryfields{origpages}
\end{filecontents*}
Another MWE
\RequirePackage{filecontents}
\begin{filecontents*}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field,datatype=range]{origpages}
\DeclareDatamodelEntryfields{origpages}
\end{filecontents*}
\begin{filecontents*}{\jobname.bib}
@book{test1,
address = {Edinburgh},
title = {I and thou},
publisher = {T. \& {T}. {Clark}},
author = {Buber, Martin},
translator = {Smith, Ronald Gregor},
year = {1937},
origdate = {1923}
}
@incollection{test2,
address = {Cambridge, {MA}},
title = {Deliberation and democratic legitimacy},
booktitle = {Deliberative democracy: {Essays} on reason and politics},
publisher = {MIT {Press}},
author = {Cohen, Joshua},
editor = {Bohman, James and Rehg, William},
year = {1997},
origdate = {1989},
reprintedfrom = {test3},
%related = {test3},
%relatedtype={reprintfrom},
origpages = {17--34},
pages = {67--91}
}
@book{test3,
address = {Oxford},
title = {The {Good} polity: {Normative} analysis of the state},
shorttitle = {The {Good} polity},
publisher = {Blackwell},
editor = {Hamlin, Alan P. and Pettit, Philip},
year = {1989}
}
}
\end{filecontents*}
\documentclass[a4paper]{article}
% Set the values for the bibliography
\usepackage[
style=apa,
backend=biber,
isbn=false,
url=false,
doi=false,
eprint=false,
hyperref=true,
backref=false,
firstinits=false,
]{biblatex}
% Recommended by biblatex
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage{xpatch}
% Set language
\usepackage[british]{babel}
\DeclareLanguageMapping{british}{british-apa}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{origpages}{\mkpageprefix[bookpagination]{#1}}
\renewbibmacro*{related:reprintfrom}[1]{%
\entrydata*{#1}{%
\printtext{\mkbibemph{\printfield[apacase]{title}}}}%
\setunit{\bibpagespunct}%
\printfield{origpages}%
\entrydata*{#1}{%
\setunit{\addcomma\addspace}%
\bibstring{byauthor}\addspace
\printnames[apanames][-\value{listtotal}]{editor}%
\ifnameundef{editor}
{}
{\addcomma\addspace
\usebibmacro{apaeditorstrg}{editor}}
\printnames[apanames][-\value{listtotal}]{author}%
\setunit{\addcomma\addspace}%
\usebibmacro{date}%
\setunit{\addcomma\addspace}%
\usebibmacro{location+publisher}%
\newunit\newblock
\usebibmacro{related}}}
\DefineBibliographyStrings{british}{
reprintfrom = {Reprinted from}
}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=reprintedfrom, fieldtarget=related, final]
\step[fieldset=relatedtype, fieldvalue={reprintfrom}]
}
}
}
\renewbibmacro*{origyear}{%
\ifboolexpr{not test {\iffieldundef{labelyear}} and not test {\iffieldsequal{labelyear}{origyear}} and not test {\iffieldequalstr{relatedtype}{reprintfrom}}}
{\printfield{origyear}}
{}}
\begin{document}
\cite{test1}
\cite{test2}
\printbibliography
\end{document}
To get rid of the origyear
information at the end of a reprint, we modify the macro to include a test for reprinted entries (it checks if relatedtype
is set to reprintfrom
; the mapping takes care of that); the information is skipped if it is a reprint.
\renewbibmacro*{origyear}{%
\ifboolexpr{not test {\iffieldundef{labelyear}} and not test {\iffieldsequal{labelyear}{origyear}} and not test {\iffieldequalstr{relatedtype}{reprintfrom}}}
{\printfield{origyear}}
{}}
Both MWEs yield
Best Answer
The
addendum
field is normally displayed almost at the very end of an entry (in most cases it would be at the end), so that would be an obvious candidate for you if you don't want to mess with the style itself.You can map
note
toaddendum
with sourcemaps so you don't even have to change your.bib
fileIf you really wanted to move the
note
for all entry types you would have to redefine or patch the bibliography drivers and the the macronote+pages
. You can then re-insert thenote
field afteraddendum
andpubstate
(again, technically that is not really at the end, but it makes sense to put it there instead of putting it at the very end).If this really is about a reprint of an article, I wholeheartedly recommend looking into the
related
function ofbiblatex
. You could try something likewhich would give