I finally managed to create a solution using biblatex
. This package by default replaces recurring author or editor names with a dash, and the macros involved can be redefined to achieve "grouping by author":
- Set the
\bibnamesep
length (which controls the spacing between different authors) to a positive value;
- Redefine
\bibnamedash
(which is invoked to typset the "recurring" dash) to do nothing;
- Create a new macro
\authoryearpunct
that a) starts a new line b) for this line, undoes the hanging indentation controlled by the \bibhang
length c) capitalizes the following string (e.g. "Editor")
- Insert this macro at the appropriate places (whenever author/editor names are actually typeset);
- Reformat the year (brackets instead of braces, no period).
Annotations like "Editor" and "Translator" will be typeset at the start of the new line, which accounts for the possibility that the same person is author of one cited work and editor/translator of another.
EDIT: Your style example includes no works with editor instead of author. That said, it should be possible to put the "editor" annotation after the year (immediately before the title).
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\setlength{\bibnamesep}{\baselineskip}
\renewcommand*{\bibnamedash}{}
\newcommand*{\authoryearpunct}{\\\hspace*{-\bibhang}\bibsentence}
\renewcommand*{\labelnamepunct}{\addspace}
\makeatletter
\renewbibmacro*{date+extrayear}{%
\iffieldundef{year}
{}
% {\printtext[parens]{\printdateextra}}}% DELETED
{\printtext[brackets]{\printdateextra}}}% NEW
\renewbibmacro*{author}{%
\ifboolexpr{
test \ifuseauthor
and
not test {\ifnameundef{author}}
}
{\usebibmacro{bbx:dashcheck}
{\bibnamedash}
{\usebibmacro{bbx:savehash}%
\printnames{author}%
% \iffieldundef{authortype}% DELETED
% {\setunit{\addspace}}% DELETED
% {\setunit{\addcomma\space}}}% DELETED
\setunit{\authoryearpunct}}% NEW
\iffieldundef{authortype}
{}
{\usebibmacro{authorstrg}%
\setunit{\addspace}}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\addspace}}%
\usebibmacro{date+extrayear}}
\renewbibmacro*{bbx:editor}[1]{%
\ifboolexpr{
test \ifuseeditor
and
not test {\ifnameundef{editor}}
}
{\usebibmacro{bbx:dashcheck}
{\bibnamedash}
{\printnames{editor}%
% \setunit{\addcomma\space}% DELETED
\setunit{\authoryearpunct}% NEW
\usebibmacro{bbx:savehash}}%
\usebibmacro{#1}%
\clearname{editor}%
\setunit{\addspace}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\addspace}}%
\usebibmacro{date+extrayear}}
\renewbibmacro*{bbx:translator}[1]{%
\ifboolexpr{
test \ifusetranslator
and
not test {\ifnameundef{translator}}
}
{\usebibmacro{bbx:dashcheck}
{\bibnamedash}
{\printnames{translator}%
% \setunit{\addcomma\space}% DELETED
\setunit{\authoryearpunct}% NEW
\usebibmacro{bbx:savehash}}%
\usebibmacro{translator+othersstrg}%
\clearname{translator}%
\setunit{\addspace}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\addspace}}%
\usebibmacro{date+extrayear}}
\makeatother
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{a01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{a02,
author = {Author, A.},
year = {2002},
title = {A title that goes to great lengthts in expounding the matter at hand and therefore doesn't fit into one line},
}
@misc{b03,
editor = {Buthor, B.},
year = {2003},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
EDIT: Somehow this worked without the \makeatletter
-\makeatother
combo. Added nevertheless.
For the original question, the modification required is:
\renewbibmacro*{title}{%
\ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
{}
{\printtext[title]{%
\printfield[apacase]{title}%
\setunit{\subtitlepunct}%
\printfield[apacase]{subtitle}}%
\setunit{\addspace}%
\printfield{titleaddon}%
\iffieldequalstr{entrytype}{book}%
{\setunit{\addspace}\usebibmacro{bookaddinfo}}%
{}%
\ifthenelse{%
\ifnameundef{author}\AND%
\(\ifnameundef{editor}\AND\NOT\boolean{bbx:editorinauthpos}\)\AND%
\ifnameundef{producer}\AND%
\ifnameundef{director}\AND%
\ifnameundef{writer}}
{\newunit\newblock
\usebibmacro{labelyear+extrayear}}
{}}}
\DeclareFieldFormat{origyear}{%
\mkbibparenss{\bibcpstring{origyear}~\thefield{origyear}%
\iffieldundef{origtitle}
{}%
{\addcolon\addspace\printfield{origtitle}}}%
}
\newbibmacro*{origyear}{%
\ifthenelse{
\NOT\iffieldundef{labelyear}
\AND\NOT\iffieldsequal{labelyear}{origyear}
\OR
\NOT\iffieldsequal{title}{origtitle}}
{\printfield{origyear}}
{}%
}
\DefineBibliographyStrings{german}{%
origyear = {Original erschienen}
}
This can be inserted in the preamble of your document.
For the extended version one has either to introduce new fields (this can be done,by modifying the data model, or by using the BibLaTeX facilities for related
).
EDIT 1 and EDIT 2
To accommodate the case where the author of the original publication is different the first step is to modify the data model, this can be done with:
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=list, datatype=name,skipout=false]{origauthor}
\DeclareDatamodelEntryfields{origauthor}
\end{filecontents}
This generates a file called biblatex-dm.cfg
in the current directory with the instruction about how to extend BibLaTeX data model.
Notice that BibLaTeX provides a titleaddon
field and this could be used to the extra information for the title ("Die Liebe" in the OP).
Eventually, one could add a field titletranslation
for the selfmade translation, i.e., one can include the following two lines in the datamodel file.
\DeclareDatamodelField[type=field, datatype=literal,skipout=false]{titletranslation}
\DeclareDatamodelEntryfields{titletranslation}
Another possibility is to use an "unused" field, for example, reprinttitle
. In what follow I'm going to use this option.
The next step is to modify the appropriate bibmacro
s. In this case, title
and origyear
for the formatting of the title (and related information about the original publication)
\renewbibmacro*{title}{%
\ifthenelse{\iffieldundef{title}\AND\iffieldundef{subtitle}}
{}
{\printtext[title]{%
\printfield[apacase]{title}%
\setunit{\subtitlepunct}%
\printfield[apacase]{subtitle}}%
\setunit{\addspace}%
\printfield{titleaddon}%
\setunit{\addspace}%
\printfield{reprinttitle}%
\iffieldequalstr{entrytype}{book}%
{\setunit{\addspace}\usebibmacro{bookaddinfo}}%
{}%
\ifthenelse{%
\ifnameundef{author}\AND%
\(\ifnameundef{editor}\AND\NOT\boolean{bbx:editorinauthpos}\)\AND%
\ifnameundef{producer}\AND%
\ifnameundef{director}\AND%
\ifnameundef{writer}}
{\newunit\newblock
\usebibmacro{labelyear+extrayear}}
{}}}
For originyear
the first thing to do is to define the format. To this we check that originauthor
is defined, and we set the punctuation accordingly:
\DeclareFieldFormat{origyear}{%
\mkbibparens{\bibcpstring{origyear}~\thefield{origyear}%
\ifnameundef{origauthor}
{}
{\addspace\bibstring{as}\addspace\printnames[FirstLast]{origauthor}}%
\iffieldundef{origtitle}
{}%
{\ifnameundef{origauthor}
{\setunit{\addcolon\addspace}}
{\setunit{\addcomma\addspace}}%
\printfield{origtitle}}}%
}
Then we have to consider the cases when we have to output the information about the original publication (here the condition is that either the year, or the title, or the author(s) is different).
\renewbibmacro*{origyear}{%
\ifthenelse{
\NOT\iffieldsequal{labelyear}{origdateyear}
\OR
\NOT\iffieldsequal{title}{origtitle}
\OR
\NOT\ifnamesequal{author}{origauthor}
}
{\printfield{origyear}}
{}%
}
Caveat A problem with the above solution is that not all bib entry types include instructions to format the information about the original publication using the above method. A more robust technique would be to use the facilities provided by BibLaTeX to handle related publications.
The last step is to use the appropriate value for the localisation strings origyear
and as
.
\NewBibliographyString{origyear,as}
\DefineBibliographyStrings{ngerman}{%
origyear = {Original erschienen},
as = {als}
}
\DefineBibliographyStrings{american}{%
as = {as}
}
Finally, to change the rendering of names, we have to modify the formatting instructions for apaauthor
\DeclareNameFormat{FirstLast}{%
\ifthenelse{\value{listcount}=\maxprtauth\AND\value{listcount}<\value{listtotal}}
{\addcomma\addspace\ldots}
{\ifthenelse{\value{listcount}>\maxprtauth\AND\value{listcount}<\value{listtotal}}
{}
{\iffirstinits
{\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}}
{\usebibmacro{name:first-last}{#1}{#3}{#5}{#7}}}}
\ifmorenames{\andothersdelim\bibstring{andothers}}{}}
Best Answer
The main difference between
subtitle
andtitleaddon
is the presentation in the bibliography. Whilesubtitle
is set in the same style as the title and connected by a special\subtitlepunct
,titleaddon
is (by default, you can of course change that) set in normal font. This can make one feel thattitleaddon
is not as closely connected to the title assubtitle
.Indeed in
biblatex-examples.bib
you will findtitleaddon
used to add a description like "Proceedings of the ...". The example files tobiblatex-chicago
usetitleaddon
either as a replacement for a proper title or to provide additional information such as "review of ..." or "interview with ...".All in all, I would say that the
titleaddon
is often used in a "meta" capacity to give additional information or to replacing a missing title.subtitle
on the other hand is mostly on the same level astitle
.In your case then, I would probably go for
subtitle
, but that is just my gut feeling.