Betrachten Sie das folgende MWE. Wie man sieht, useeditor=true
wird die Option für den Eintrag ignoriert @incollection
und tatsächlich gleich behandelt wie useeditor=false
. Warum? Und wie kann ich dafür sorgen, dass es darauf achtet?
\documentclass{article}
\usepackage[style = authoryear-comp]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@INCOLLECTION{beatles1970a,
BOOKTITLE = "Let it be (a)",
EDITOR = "The Beatles",
TITLE = "Maggie Mae",
YEAR = "1970",
PAGES = "17--18",
OPTIONS = "useeditor=true"}
@BOOK{beatles1970b,
TITLE = "Let it be (b)",
EDITOR = "The Beatles",
YEAR = "1970",
OPTIONS = "useeditor=true"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Antwort1
In den Kommentaren wurde darauf hingewiesen, dass sich editor
, translator
und Freunde bei @in
Arbeiten auf das Beiliegende booktitle
und nicht auf beziehen title
.
Wir können neue Namen erstellen, die sich auf den Herausgeber, Übersetzer usw. von beziehen. title
Wir nennen sie ineditor
, intranslator
, ...
Zuerst brauchen wir eine .dbx
Datei mit dem neuen Datenmodus. Dann müssen wir nur noch alle Makros für editor
, translator
nach ineditor
, kopieren intranslator
. In unserem MWE brauchen wir dann nur noch
\renewbibmacro*{author/translator+others}{\usebibmacro{author/ineditor+others/intranslator+others}} %% this is an ad hoc for this particular application
und sind startklar
\documentclass{article}
\usepackage{filecontents}
\usepackage{xpatch}
\begin{filecontents}{innames.dbx}
\ProvidesFile{innames.dbx}[2015/11/01 more field for @in types]
\RequireBiber[3]
% new translator etc. fields for "inner" work, that is translator of title (not booktitle) in @in...
\DeclareDatamodelFields[type=list,datatype=name]{ineditor, intranslator, inannotator, incommentator, inintroduction, inforeword, inafterword}
\DeclareDatamodelEntryfields[inbook,incollection,inproceedings,inreference]{ineditor, intranslator, inannotator, incommentator, inintroduction, inforeword, inafterword}
\end{filecontents}
\usepackage[style = authoryear-comp, datamodel=innames]{biblatex}
\begin{filecontents}{\jobname.bib}
@INCOLLECTION{beatles1970a,
BOOKTITLE = "Let it be (a)",
inEDITOR = {{The Beatles}},
TITLE = "Maggie Mae",
YEAR = "1970",
PAGES = "17--18",
OPTIONS = "useineditor=true"}
@BOOK{beatles1970b,
TITLE = "Let it be (b)",
EDITOR = {{The Beatles}},
YEAR = "1970",}
\end{filecontents}
\addbibresource{\jobname.bib}
\makeatletter
\newbibmacro*{ineditorstrg}{%
\printtext[ineditortype]{%
\iffieldundef{ineditortype}
{\ifboolexpr{
test {\ifnumgreater{\value{ineditor}}{1}}
or
test {\ifandothers{ineditor}}
}
{\bibstring{editors}}
{\bibstring{editor}}}
{\ifbibxstring{\thefield{ineditortype}}
{\ifboolexpr{
test {\ifnumgreater{\value{ineditor}}{1}}
or
test {\ifandothers{ineditor}}
}
{\bibstring{\thefield{ineditortype}s}}
{\bibstring{\thefield{ineditortype}}}}
{\thefield{ineditortype}}}}}
\newbibmacro*{ineditor+othersstrg}{%
\iffieldundef{ineditortype}
{\ifboolexpr{
test {\ifnumgreater{\value{ineditor}}{1}}
or
test {\ifandothers{ineditor}}
}
{\def\abx@tempa{editors}}
{\def\abx@tempa{editor}}}
{\ifboolexpr{
test {\ifnumgreater{\value{ineditor}}{1}}
or
test {\ifandothers{ineditor}}
}
{\edef\abx@tempa{\thefield{ineditortype}s}}
{\edef\abx@tempa{\thefield{ineditortype}}}}%
\let\abx@tempb=\empty
\ifnamesequal{ineditor}{intranslator}
{\appto\abx@tempa{tr}%
\appto\abx@tempb{\clearname{intranslator}}}
{}%
\ifnamesequal{ineditor}{incommentator}
{\appto\abx@tempa{co}%
\appto\abx@tempb{\clearname{incommentator}}}
{\ifnamesequal{ineditor}{inannotator}
{\appto\abx@tempa{an}%
\appto\abx@tempb{\clearname{inannotator}}}
{}}%
\ifnamesequal{ineditor}{inintroduction}
{\appto\abx@tempa{in}%
\appto\abx@tempb{\clearname{inintroduction}}}
{\ifnamesequal{ineditor}{inforeword}
{\appto\abx@tempa{fo}%
\appto\abx@tempb{\clearname{inforeword}}}
{\ifnamesequal{ineditor}{inafterword}
{\appto\abx@tempa{af}%
\appto\abx@tempb{\clearname{inafterword}}}
{}}}%
\ifbibxstring{\abx@tempa}
{\printtext[ineditortype]{\bibstring{\abx@tempa}}\abx@tempb}
{\usebibmacro{ineditorstrg}}}
\newbibmacro*{intranslatorstrg}{%
\printtext[intranslatortype]{%
\ifboolexpr{
test {\ifnumgreater{\value{intranslator}}{1}}
or
test {\ifandothers{intranslator}}
}
{\bibstring{translators}}
{\bibstring{translator}}}}
\newbibmacro*{intranslator+othersstrg}{%
\ifboolexpr{
test {\ifnumgreater{\value{intranslator}}{1}}
or
test {\ifandothers{intranslator}}
}
{\def\abx@tempa{translators}}
{\def\abx@tempa{translator}}%
\ifnamesequal{intranslator}{incommentator}
{\appto\abx@tempa{co}%
\clearname{incommentator}}
{\ifnamesequal{intranslator}{inannotator}
{\appto\abx@tempa{an}%
\clearname{inannotator}}
{}}%
\ifnamesequal{intranslator}{inintroduction}
{\appto\abx@tempa{in}%
\clearname{inintroduction}}
{\ifnamesequal{intranslator}{inforeword}
{\appto\abx@tempa{fo}%
\clearname{inforeword}}
{\ifnamesequal{intranslator}{inafterword}
{\appto\abx@tempa{af}%
\clearname{inafterword}}
{}}}%
\bibstring{\abx@tempa}}
\newbibmacro*{ineditor+others}{%
\ifboolexpr{
test \ifuseineditor
and
not test {\ifnameundef{ineditor}}
}
{\printnames{ineditor}%
\setunit{\addcomma\space}%
\usebibmacro{ineditor+othersstrg}%
\clearname{ineditor}}
{}}
\newbibmacro*{intranslator+others}{%
\ifboolexpr{
test \ifuseintranslator
and
not test {\ifnameundef{intranslator}}
}
{\printnames{intranslator}%
\setunit{\addcomma\space}%
\usebibmacro{intranslator+othersstrg}%
\clearname{intranslator}}
{}}
\newbibmacro*{author/ineditor+others/intranslator+others}{%
\ifboolexpr{
test \ifuseauthor
and
not test {\ifnameundef{author}}
}
{\usebibmacro{author}}
{\ifboolexpr{
test \ifuseineditor
and
not test {\ifnameundef{ineditor}}
}
{\usebibmacro{ineditor+others}}
{\usebibmacro{intranslator+others}}}}
\newbibmacro*{byineditor}{%
\ifnameundef{ineditor}
{}
{\usebibmacro{bytypestrg}{ineditor}{editor}%
\setunit{\addspace}%
\printnames[byineditor]{ineditor}%
\newunit}%
\usebibmacro{byineditorx}}
\newbibmacro*{byineditorx}{%
\ifnameundef{ineditora}
{}
{\usebibmacro{bytypestrg}{ineditora}{editor}%
\setunit{\addspace}%
\printnames[byineditora]{ineditora}%
\newunit}%
\ifnameundef{ineditorb}
{}
{\usebibmacro{bytypestrg}{ineditorb}{editor}%
\setunit{\addspace}%
\printnames[byineditorb]{ineditorb}%
\newunit}%
\ifnameundef{ineditorc}
{}
{\usebibmacro{bytypestrg}{ineditorc}{editor}%
\setunit{\addspace}%
\printnames[byineditorc]{ineditorc}%
\newunit}}
\newbibmacro*{byintranslator}{%
\ifnameundef{intranslator}
{}
{\bibstring{bytranslator}%
\setunit{\addspace}%
\printnames[byintranslator]{intranslator}}}
\newbibmacro*{byineditor+others}{%
\ifnameundef{ineditor}
{}
{\usebibmacro{byineditor+othersstrg}%
\setunit{\addspace}%
\printnames[byineditor]{ineditor}%
\clearname{ineditor}%
\newunit}%
\usebibmacro{byineditorx}%
\usebibmacro{byintranslator+others}}
\newbibmacro*{byintranslator+others}{%
\ifnameundef{intranslator}
{}
{\usebibmacro{byintranslator+othersstrg}%
\setunit{\addspace}%
\printnames[byintranslator]{intranslator}%
\clearname{intranslator}%
\newunit}}
\newbibmacro*{byineditor+othersstrg}{%
\iffieldundef{ineditortype}
{\def\abx@tempa{byeditor}}
{\edef\abx@tempa{by\thefield{ineditortype}}}%
\let\abx@tempb=\empty
\ifnamesequal{ineditor}{intranslator}
{\appto\abx@tempa{tr}%
\appto\abx@tempb{\clearname{intranslator}}}
{}%
\ifnamesequal{ineditor}{incommentator}
{\appto\abx@tempa{co}%
\appto\abx@tempb{\clearname{incommentator}}}
{\ifnamesequal{ineditor}{inannotator}
{\appto\abx@tempa{an}%
\appto\abx@tempb{\clearname{inannotator}}}
{}}%
\ifnamesequal{ineditor}{inintroduction}
{\appto\abx@tempa{in}%
\appto\abx@tempb{\clearname{inintroduction}}}
{\ifnamesequal{ineditor}{inforeword}
{\appto\abx@tempa{fo}%
\appto\abx@tempb{\clearname{inforeword}}}
{\ifnamesequal{ineditor}{inafterword}
{\appto\abx@tempa{af}%
\appto\abx@tempb{\clearname{inafterword}}}
{}}}%
\ifbibxstring{\abx@tempa}
{\printtext{\bibstring{\abx@tempa}}\abx@tempb}
{\usebibmacro{bytypestrg}{ineditor}{editor}}}
\newbibmacro*{byintranslator+othersstrg}{%
\def\abx@tempa{bytranslator}%
\ifnamesequal{intranslator}{incommentator}
{\appto\abx@tempa{co}%
\clearname{incommentator}}
{\ifnamesequal{intranslator}{inannotator}
{\appto\abx@tempa{an}%
\clearname{inannotator}}
{}}%
\ifnamesequal{intranslator}{inintroduction}
{\appto\abx@tempa{in}%
\clearname{inintroduction}}
{\ifnamesequal{intranslator}{inforeword}
{\appto\abx@tempa{fo}%
\clearname{inforeword}}
{\ifnamesequal{intranslator}{inafterword}
{\appto\abx@tempa{af}%
\clearname{inafterword}}
{}}}%
\bibstring{\abx@tempa}}
\makeatother
\renewbibmacro*{author/translator+others}{\usebibmacro{author/ineditor+others/intranslator+others}} %% this is an ad hoc for this particular application
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Vielleicht finden Sie den umgekehrten Ansatz logischer (insbesondere angesichts der Tatsache, dass das das des bookauthor
ist ), sodass wir auch so tun können, als ob die Felder , , ... sich auf das beziehen und uns neue , , ... für die Arbeit ausdenken können .author
booktitle
editor
translator
title
bookeditor
booktranslator
booktitle
Dieser Ansatz ist strenggenommen nicht mit dem Standarddatenmodell kompatibel.
Die .dbx
Datei ist etwas anders und die meisten Namensmakros werden in umbenannt by...
. Für das MWE brauchen wir dann nur noch
\renewbibmacro*{author/translator+others}{\usebibmacro{author/editor+others/translator+others}} %% this is an ad hoc for this particular application
\xpatchbibdriver{inbook}
{\usebibmacro{byeditor+others}}
{\usebibmacro{bybookeditor+others}}
{\typeout{yes inbook}}{\typeout{no inbook}}
\xpatchbibdriver{incollection}
{\usebibmacro{byeditor+others}}
{\usebibmacro{bybookeditor+others}}
{\typeout{yes incollection}}{\typeout{no incollection}}
MWE
\documentclass{article}
\usepackage{filecontents}
\usepackage{xpatch}
\begin{filecontents}{booknames.dbx}
\ProvidesFile{booknames.dbx}[2015/11/01 more field for @in types]
\RequireBiber[3]
\DeclareDatamodelFields[type=list,datatype=name]{bookeditor, booktranslator, bookannotator, bookcommentator, bookintroduction, bookforeword, bookafterword}
\DeclareDatamodelEntryfields[inbook,incollection,inproceedings,inreference]{bookeditor, booktranslator, bookannotator, bookcommentator, bookintroduction, bookforeword, bookafterword}
\end{filecontents}
\usepackage[style = authoryear-comp, datamodel=booknames]{biblatex}
\begin{filecontents}{\jobname.bib}
@INCOLLECTION{beatles1970a,
BOOKTITLE = "Let it be (a)",
EDITOR = {{The Beatles}},
bookeditor = {James Joyce},
booktranslator = {James Joyce},
TITLE = "Maggie Mae",
YEAR = "1970",
PAGES = "17--18",
OPTIONS = "useeditor=true"}
@BOOK{beatles1970b,
TITLE = "Let it be (b)",
EDITOR = {{The Beatles}},
YEAR = "1970",}
\end{filecontents}
\addbibresource{\jobname.bib}
\makeatletter
\newbibmacro*{bybookeditor}{%
\ifnameundef{bookeditor}
{}
{\usebibmacro{bytypestrg}{bookeditor}{bookeditor}%
\setunit{\addspace}%
\printnames[bybookeditor]{bookeditor}%
\newunit}}
\newbibmacro*{bybooktranslator}{%
\ifnameundef{booktranslator}
{}
{\bibstring{bytranslator}%
\setunit{\addspace}%
\printnames[bybooktranslator]{booktranslator}}}
\newbibmacro*{bybookeditor+others}{%
\ifnameundef{bookeditor}
{}
{\usebibmacro{bybookeditor+othersstrg}%
\setunit{\addspace}%
\printnames[bybookeditor]{bookeditor}%
\clearname{bookeditor}%
\newunit}%
\usebibmacro{bybooktranslator+others}}
\newbibmacro*{bybooktranslator+others}{%
\ifnameundef{booktranslator}
{}
{\usebibmacro{bybooktranslator+othersstrg}%
\setunit{\addspace}%
\printnames[bybooktranslator]{booktranslator}%
\clearname{booktranslator}%
\newunit}%
\usebibmacro{withbookothers}}
\newbibmacro*{bybookeditor+othersstrg}{%
\iffieldundef{bookeditortype}
{\def\abx@tempa{byeditor}}
{\edef\abx@tempa{by\thefield{bookeditortype}}}%
\let\abx@tempb=\empty
\ifnamesequal{bookeditor}{booktranslator}
{\appto\abx@tempa{tr}%
\appto\abx@tempb{\clearname{booktranslator}}}
{}%
\ifnamesequal{bookeditor}{bookcommentator}
{\appto\abx@tempa{co}%
\appto\abx@tempb{\clearname{bookcommentator}}}
{\ifnamesequal{bookeditor}{bookannotator}
{\appto\abx@tempa{an}%
\appto\abx@tempb{\clearname{bookannotator}}}
{}}%
\ifnamesequal{bookeditor}{bookintroduction}
{\appto\abx@tempa{in}%
\appto\abx@tempb{\clearname{bookintroduction}}}
{\ifnamesequal{bookeditor}{bookforeword}
{\appto\abx@tempa{fo}%
\appto\abx@tempb{\clearname{bookforeword}}}
{\ifnamesequal{bookeditor}{bookafterword}
{\appto\abx@tempa{af}%
\appto\abx@tempb{\clearname{bookafterword}}}
{}}}%
\ifbibxstring{\abx@tempa}
{\printtext{\bibstring{\abx@tempa}}\abx@tempb}
{\usebibmacro{bytypestrg}{bookeditor}{bookeditor}}}
\newbibmacro*{bybooktranslator+othersstrg}{%
\def\abx@tempa{bytranslator}%
\ifnamesequal{booktranslator}{bookcommentator}
{\appto\abx@tempa{co}%
\clearname{bookcommentator}}
{\ifnamesequal{booktranslator}{bookannotator}
{\appto\abx@tempa{an}%
\clearname{bookannotator}}
{}}%
\ifnamesequal{booktranslator}{bookintroduction}
{\appto\abx@tempa{in}%
\clearname{bookintroduction}}
{\ifnamesequal{booktranslator}{bookforeword}
{\appto\abx@tempa{fo}%
\clearname{bookforeword}}
{\ifnamesequal{booktranslator}{bookafterword}
{\appto\abx@tempa{af}%
\clearname{bookafterword}}
{}}}%
\bibstring{\abx@tempa}}
\newbibmacro*{withbookcommentator}{%
\ifnameundef{bookcommentator}
{}
{\bibstring{withcommentator}%
\setunit{\addspace}%
\printnames[withbookcommentator]{bookcommentator}}}
\newbibmacro*{withbookannotator}{%
\ifnameundef{bookannotator}
{}
{\bibstring{withannotator}%
\setunit{\addspace}%
\printnames[withbookannotator]{bookannotator}}}
\newbibmacro*{withbookintroduction}{%
\ifnameundef{bookintroduction}
{}
{\bibstring{withintroduction}%
\setunit{\addspace}%
\printnames[withbookintroduction]{bookintroduction}}}
\newbibmacro*{withbookforeword}{%
\ifnameundef{bookforeword}
{}
{\bibstring{withbookforeword}%
\setunit{\addspace}%
\printnames[withbookforeword]{bookforeword}}}
\newbibmacro*{withbookafterword}{%
\ifnameundef{bookafterword}
{}
{\bibstring{withafterword}%
\setunit{\addspace}%
\printnames[withbookafterword]{bookafterword}}}
\newbibmacro*{withbookothers}{%
\usebibmacro{withbookcommentator}%
\clearname{bookcommentator}%
\newunit
\usebibmacro{withbookannotator}%
\clearname{bookannotator}%
\newunit
\usebibmacro{withbookintroduction}%
\clearname{bookintroduction}%
\newunit
\usebibmacro{withbookforeword}%
\clearname{bookforeword}%
\newunit
\usebibmacro{withbookafterword}%
\clearname{bookafterword}}
\makeatother
\renewbibmacro*{author/translator+others}{\usebibmacro{author/editor+others/translator+others}} %% this is an ad hoc for this particular application
\xpatchbibdriver{inbook}
{\usebibmacro{byeditor+others}}
{\usebibmacro{bybookeditor+others}}
{\typeout{yes inbook}}{\typeout{no inbook}}
\xpatchbibdriver{incollection}
{\usebibmacro{byeditor+others}}
{\usebibmacro{bybookeditor+others}}
{\typeout{yes incollection}}{\typeout{no incollection}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}