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
Such things are typically added using the optional argument of the citation command. You don't say anything about your setup, here is an example with
natbib
:Note that with numerical styles (such as
alpha
) you should only use\cite
. With author-year citations, as shown in your image, you need\citet[7-42]{citekey}
to get an output of the form Author (year, pages). For example: