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
![enter image description here](https://i.stack.imgur.com/ObiRr.png)
Best Answer
You say that you wish to cite a chapter from a book. I can think of two cases.
First, suppose that it's important to inform your readers that the relevant information is from a specific chapter in the book. In that case, you should provide the name of the chapter as well as, presumably, the chapter number. I.e., change the entry type from
@book
to@inbook
, change thetitle
field tobooktitle
, provide the name of the chapter in a newtitle
field, and state the number of the chapter in a new field calledchapter
. I.e., something like this:Second, suppose that all you need to do is to inform your readers that you are citing something from page 64 of Hua's book. In that case, there's presumably no need to provide information about the chapter name and number. Thus, using the
@book
entry type is just fine. However, you will need to change the citation command from\cite{hua_2013}
to\cite[p.~64]{hua_2013}
.