I think the only way is the redefinition of the cite command. In the example below I defined a new macro named uppercite
which formats the name via the redefinition of \mkbibnamelast
:
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{uppercite}}
{\multicitedelim}
{\usebibmacro{postnote}}
\newbibmacro*{uppercite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\def\mkbibnamelast##1{\MakeUppercase{##1}}\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
The complete MWE is:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{CARNAP1935,
Address = {London},
Author = {Carnap, Rudolf},
Publisher = {Kegan Paul, Trench, Trubner \& Co.},
Title = {Philosophy and Logical Syntax},
Year = {1935}}
@book{CARNAP1937,
Address = {London},
Author = {Carnap, Rudolf},
Note = {Transl. Amethe Smeaton (Countess von Zeppelin)},
Publisher = {Kegan Paul},
Title = {The Logical Syntax of Language},
Year = 1937}
@book{SCHICKORE2006,
Address = {Dordrecht},
Author = {SCHICKORE, J. and STEINLE, F.},
Date-Added = {2012-07-19 08:53:43 +0000},
Date-Modified = {2013-03-09 19:03:37 +0000},
Publisher = {Kluwer Academic Pub},
Title = {Revisiting discovery and justification: historical and philosophical perspectives on the context distinction},
Volume = {14},
Year = {2006}}
\end{filecontents*}
\documentclass[12pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[citestyle=authoryear,bibstyle=authortitle,labelnumber,natbib=true,firstinits=true,isbn=false,babel=other,language=brazilian,backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{uppercite}}
{\multicitedelim}
{\usebibmacro{postnote}}
\newbibmacro*{uppercite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\def\mkbibnamelast##1{\MakeUppercase{##1}}\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
\begin{document}
\verb+\textcite{CARNAP1937}+\quad\textcite{CARNAP1937}
\verb+\parencite{CARNAP1935}+\quad\parencite{CARNAP1935}
\verb+\parencite{SCHICKORE2006}+\quad\parencite{SCHICKORE2006}
\verb+\parencite{CARNAP1935}\parencite{SCHICKORE2006}+\parencite{CARNAP1935}\parencite{SCHICKORE2006}
\verb+\parencite{CARNAP1935,SCHICKORE2006}+\parencite{CARNAP1935,SCHICKORE2006}
\printbibliography
\end{document}
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
Since you cannot do nested citations (see also here) there is only a work around: I take your MWE (just changed
bibtex-keys
):That is the result: