¿Por qué se ignora la opción biblatex "useeditor=true" para los artículos de libros?

¿Por qué se ignora la opción biblatex "useeditor=true" para los artículos de libros?

Considere el siguiente MWE. Como puede verse, la opción useeditor=truese ignora para la @incollectionentrada y, de hecho, se trata de la misma manera que useeditor=false. ¿Por qué? ¿Y cómo puedo hacer para que le importe?

\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}

ingrese la descripción de la imagen aquí

Respuesta1

En los comentarios se ha comentado eso editor, translatory amigos por @inobras se refieren al cerramiento booktitley no al title.

Podemos crear nuevos nombres que hagan referencia al editor, traductor,… del title, los llamaremos ineditor, intranslator,…

Primero necesitamos un .dbxarchivo con el nuevo modo de datos. Luego solo necesitamos copiar todas las macros de editor, translatora ineditor, intranslator. En nuestro MWE entonces solo necesitamos

\renewbibmacro*{author/translator+others}{\usebibmacro{author/ineditor+others/intranslator+others}} %% this is an ad hoc for this particular application

y están listos para ir

\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}

salida de ejemplo


Tal vez le resulte más lógico el enfoque opuesto (especialmente viendo que bookauthores el authorde booktitle), por lo que también podemos pretender que los campos editor, translator, ... se refieren a titley crear nuevos bookeditor, booktranslator, ... para el booktitletrabajo.Este enfoque es estrictamente incompatible con el modelo de datos estándar.

El .dbx archivo es ligeramente diferente y la mayoría de las macros de nombre cambian a by.... Para el MWE entonces solo necesitamos

\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}

información relacionada