Cómo imprimir solo el editor y el título de la entrada principal en una entrada secundaria en la bibliografía

Cómo imprimir solo el editor y el título de la entrada principal en una entrada secundaria en la bibliografía

En mi bibliografía quieroimprimir solo el nombre del editor y el título del trabajo principal en la entrada secundaria si el padre tiene al menos dos hijos, mientras que lo que ahora obtengo es la entrada principal completa dentro de cada entrada secundaria. Luego, la entrada principal debe imprimirse en su totalidad bajo el nombre del editor. Así que en lugar de

Test Author. “Testing the second Title”. In: My Proceedings. Ed. by Senor Editor and Senora Editora. Any Publisher, 2013, pp. 10–20.

Test Author. “Testing the Title”. In: My Proceedings. Ed. by Senor Editor and Senora Editora. Any Publisher, 2013, pp. 1–10.

Senor Editor and Senora Editora, eds. My Proceedings. Any Publisher, 2013.

lo que me gustaría obtener es:

Test Author: “Testing the second Title”. In: Senor Editor and Senora Editora, eds., *My Proceedings*, pp. 10–20.

[Test Author. “Testing the Title”. In: Senor Editor and Senora Editora, eds., *My Proceedings*, pp. 1–10.

Senor Editor and Senora Editora, eds. *My Proceedings*. Any Publisher, 2013.

Soy consciente de que se ha respondido una pregunta similar.aquí, pero no puedo entender cómo puedo manipular el código sugerido allí para que imprima el editor y el título. Logré reemplazar la etiqueta alfabética por el título de la colección (o actas o libro) usando

\printfield{labeltitle}

en lugar de

\printfield{labelalpha}

pero tampoco

\printfield{labelname}

ni

\printlist{labelname}

parece funcionar para obtener el nombre del editor. ¿Alguna idea de qué está pasando aquí? Agrego un MWE:

\documentclass[]{scrartcl}

\usepackage[backend=biber,style=authortitle-icomp]{biblatex}
\usepackage{filecontents}

\begin{filecontents}{my.bib}
@incollection{inproc1,
    Author = {Test Author},
    Crossref = {proc},
    Pages = {1--10},
    Title = {Testing the Title}}

@incollection{inproc2,
    Author = {Test Author},
    Crossref = {proc},
    Pages = {10--20},
    Title = {Testing the second Title}}

@collection{proc,
    Editor = {Senor Editor and Senora Editora},
    Publisher = {Any Publisher},
    Title = {My Proceedings},
    Year = {2013}}

@inproceedings{inproc3,
    Author  = {Nother Author},
    Publisher = {Nother Publisher},
    Title   = {In Some Other Proceedings},
    Maintitle = {Main Title of Other Proceedings},
    Year     = {2001},
}
\end{filecontents}


\DeclareBibliographyDriver{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \iffieldundef{crossref}
    {\usebibmacro{crossref:full}}
    {\usebibmacro{crossref:label}}
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \iffieldundef{crossref}
    {\usebibmacro{crossref:extrainfo}}
    {}
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}

\newbibmacro{crossref:full}{%
    \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \usebibmacro{event+venue+date}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit
  \usebibmacro{publisher+location+date}}

\newbibmacro{crossref:label}{%
  \entrydata{\strfield{crossref}}
     {\printtext{
        {\printfield{labeltitle}\printfield{extratitle}}}}}

\addbibresource{my.bib}

\begin{document}

Test \cite{inproc1} and \cite{inproc2} and \cite{inproc3}
\printbibliography
\end{document}

Y, una pequeña cosa más (un punto demasiado relacionado y menor para una pregunta adicional), ¿cómo puedo hacer que el título de la colección aparezca en cursiva en la entrada secundaria?

Gracias por su ayuda, ya que es mi primera publicación en TeX Stack Exchange, no dude en corregirme en caso de que no haya sido claro o haya violado alguna convención.

Respuesta1

Para imprimir los nombres que necesita \printnames{labelname}.

Si desea labelnameimprimir nombres completos, entonces necesita \DeclareNameAlias{labelname}{given-family}.

Para obtener (ed./eds.) después de labelname, agregue \setunit*{\addspace}\printtext[parens]{editorstrg}.

Para obtener (ed./eds.) después del editor principal en la entrada proc, necesita parchear la bbx:editormacro usando xpatch, así:

\xpatchbibmacro{bbx:editor}
  {\usebibmacro{#1}}
  {\setunit{\addspace}\printtext[parens]{\usebibmacro{#1}}}
  {}{}

Para obtener el título labeltitleen cursiva, puede utilizarlo, \printfield[title]{labeltitle}ya que el formato predeterminado para el título es cursiva.

Entonces tu crossref:labelmacro se convierte en:

\newbibmacro{crossref:label}{%
  \entrydata{\strfield{crossref}}
     {\DeclareNameAlias{labelname}{given-family}%
      \printnames{labelname}%
      \setunit*{\addspace}%
      \printtext[parens]{\usebibmacro{editorstrg}}%
      \setunit*{\addcomma\space}%
      \printfield[title]{labeltitle}}}

Nota:Esto es muy específico para tu pregunta. Se necesita más personalización para manejar los casos en los que nombre de etiqueta no hace referencia a un editor (por ejemplo, traductor).

Aquí está el MWE completo y el resultado:

\documentclass[]{scrartcl}

\usepackage{xpatch}
\usepackage[backend=biber,style=authortitle-icomp]{biblatex}
\usepackage{filecontents}

\begin{filecontents}{my.bib}
@incollection{inproc1,
    Author = {Test Author},
    Crossref = {proc},
    Pages = {1--10},
    Title = {Testing the Title}}

@incollection{inproc2,
    Author = {Test Author},
    Crossref = {proc},
    Pages = {10--20},
    Title = {Testing the second Title}}

@collection{proc,
    Editor = {Senor Editor and Senora Editora},
    Publisher = {Any Publisher},
    Title = {My Proceedings},
    Year = {2013}}

@inproceedings{inproc3,
    Author  = {Nother Author},
    Publisher = {Nother Publisher},
    Title   = {In Some Other Proceedings},
    Maintitle = {Main Title of Other Proceedings},
    Year     = {2001},
}
\end{filecontents}

\xpatchbibmacro{bbx:editor}
  {\usebibmacro{#1}}
  {\setunit{\addspace}\printtext[parens]{\usebibmacro{#1}}}
  {}{}

\DeclareBibliographyDriver{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
  \iffieldundef{crossref}
    {\usebibmacro{crossref:full}}
    {\usebibmacro{crossref:label}}
  \newunit\newblock
  \usebibmacro{chapter+pages}%
  \iffieldundef{crossref}
    {\usebibmacro{crossref:extrainfo}}
    {}
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}

\newbibmacro{crossref:full}{%
    \usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \usebibmacro{event+venue+date}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \printlist{organization}%
  \newunit
  \usebibmacro{publisher+location+date}}

\newbibmacro{crossref:label}{%
  \entrydata{\strfield{crossref}}
     {\DeclareNameAlias{labelname}{given-family}%
      \printnames{labelname}%
      \setunit*{\addspace}%
      \printtext[parens]{\usebibmacro{editorstrg}}%
      \setunit*{\addcomma\space}%
      \printfield[title]{labeltitle}}}

\newbibmacro{crossref:extrainfo}{%
  \newunit\newblock
  \iftoggle{bbx:isbn}
    {\printfield{isbn}}
    {}%
  \newunit\newblock
  \usebibmacro{doi+eprint+url}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}}

\addbibresource{my.bib}
\pagestyle{empty}
\begin{document}

Test \cite{inproc1} and \cite{inproc2} and \cite{inproc3}
\printbibliography
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Esta es la característica de BibTeX que más extraño.

Con BibTeX, esto simplemente funciona: es fácil, infalible y robusto.

En Biblatex, se requiere código adicional para cada tipo de entrada y ese código debe adaptarse a la bibliografía y al estilo de cita utilizado: es difícil, propenso a errores, una pesadilla de mantener y, por lo tanto, extremadamente frágil.

Biblatex es obviamente mucho más poderoso y sofisticado que BibTeX. Es lamentable que las bibliografías infladas se encuentren entre las pocas regresiones reales en comparación con su predecesor.


Creo, aunque no estoy seguro, que quieres algo como esto:

bibliografía menos abultada

La siguiente es una adaptación del código que uso, que a su vez está adaptado de varias respuestas a varias preguntas sobre TeX SE y de partes del código estándar de Biblatex. Estos se indican en los comentarios del código.

\begin{filecontents}{\jobname.bib}
@incollection{inproc1,
    Author = {Test Author},
    Crossref = {proc},
    Pages = {1--10},
    Title = {Testing the Title}}

@incollection{inproc2,
    Author = {Test Author},
    Crossref = {proc},
    Pages = {10--20},
    Title = {Testing the second Title}}

@collection{proc,
    Editor = {Senor Editor and Senora Editora},
    Publisher = {Any Publisher},
    Title = {My Proceedings},
    Year = {2013}}

@inproceedings{inproc3,
    Author  = {Nother Author},
    Publisher = {Nother Publisher},
    Title   = {In Some Other Proceedings},
    Maintitle = {Main Title of Other Proceedings},
    Year     = {2001},
}
\end{filecontents}
\begin{filecontents}{biblatex.cfg}
\ProvidesFile{biblatex.cfg}
% solution adapted from moewe's answer at http://tex.stackexchange.com/a/267321/, standard.bbx based on answer by Denis at http://tex.stackexchange.com/a/118850/, manual
\newif\iffaxminell@biblatex@compcoll
\faxminell@biblatex@compcollfalse
\DeclareBibliographyOption[boolean]{comp-coll}[true]{%
  \edef\tempa{#1}%
  \edef\tempb{true}%
  \edef\tempc{false}%
  \ifx\tempa\tempb
    \faxminell@biblatex@compcolltrue
  \else
    \ifx\tempa\tempc
      \faxminell@biblatex@compcollfalse
    \fi
  \fi
}
\AtEndPreamble{%
  \iffaxminell@biblatex@compcoll
    \newbibmacro*{faxminell:incollection:coll}{% addaswyd o standard.bbx 2017-04-16
      \usebibmacro{maintitle+booktitle}%
      \newunit\newblock
      \usebibmacro{byeditor+others}%
      \newunit\newblock
      \printfield{edition}%
      \newunit
      \iffieldundef{maintitle}
        {\printfield{volume}%
          \printfield{part}}
        {}%
      \newunit
      \printfield{volumes}%
      \newunit\newblock
      \usebibmacro{series+number}%
      \newunit\newblock
      \printfield{note}%
      \newunit\newblock
      \usebibmacro{publisher+location+date}%
      \newunit\newblock
      \usebibmacro{chapter+pages}%
      \newunit\newblock
      \iftoggle{bbx:isbn}
        {\printfield{isbn}}
        {}%
      \newunit\newblock
      \usebibmacro{doi+eprint+url}%
      \newunit\newblock
      \usebibmacro{addendum+pubstate}%
    }%
    \newbibmacro*{faxminell:incollection:crossref}{%
      \ifentryinbib{\thefield{crossref}}{%
        \cite{\thefield{crossref}}%
        \newunit\newblock
        \usebibmacro{chapter+pages}%
      }{%
        \iffieldundef{xref}{%
          \usebibmacro{faxminell:incollection:coll}%
        }{%
          \usebibmacro{faxminell:incollection:xref}%
        }%
      }%
    }%
    \newbibmacro*{faxminell:incollection:xref}{%
      \ifentryinbib{\thefield{xref}}{%
        \cite{\thefield{xref}}%
        \newunit\newblock
        \usebibmacro{chapter+pages}%
      }{%
        \usebibmacro{faxminell:incollection:coll}%
      }%
    }%
    \DeclareBibliographyDriver{incollection}{% adapted from standard.bbx based on answer by Denis at http://tex.stackexchange.com/a/118850/
      \citereset%
      \usebibmacro{bibindex}%
      \usebibmacro{begentry}%
      \usebibmacro{author/translator+others}%
      \setunit{\printdelim{nametitledelim}}\newblock
      \usebibmacro{title}%
      \newunit
      \printlist{language}%
      \newunit\newblock
      \usebibmacro{byauthor}%
      \newunit\newblock
      \usebibmacro{bytranslator+others}%
      \newunit\newblock
      \usebibmacro{in:}%
      \iffieldundef{crossref}{%
        \iffieldundef{xref}{%
          \usebibmacro{faxminell:incollection:coll}%
        }{%
          \usebibmacro{faxminell:incollection:xref}%
        }%
      }{%
        \usebibmacro{faxminell:incollection:crossref}%
      }%
      \setunit{\bibpagerefpunct}\newblock
      \usebibmacro{pageref}%
      \newunit\newblock
      \iftoggle{bbx:related}
        {\usebibmacro{related:init}%
         \usebibmacro{related}}
        {}%
      \usebibmacro{finentry}%
    }%
  \fi
}
% END redefine handling of @incollection etc.
\endinput
\end{filecontents}

\documentclass{article}
\usepackage[backend=biber,style=authortitle-icomp,comp-coll]{biblatex}
\addbibresource{\jobname.bib}

\begin{document}

Test \cite{inproc1} and \cite{inproc2} and \cite{inproc3}
\printbibliography

\end{document}

Si ya tienes un biblatex.cfg, obviamente puedes agregar el código a tus personalizaciones existentes. Alternativamente, puede incluir el código en su preámbulo de la forma habitual, es decir, intercalándolo entre \makeatlettery \makeatother.

Si necesita esto para tipos de entrada como @inproceedingsetc., entonces debería poder modificarlos de manera similar. (No tenía claro si necesitabas esto o no, así que simplemente hice el @incollectioncaso, que es el único que encontré que necesitaba hasta ahora).

Respuesta3

Los estilos del biblatex-extpaquete tienen una opción llamada citexrefque permite entradas de bibliografía un poco más cortas.

Simplemente reemplácelo style=authortitle-icomp,y style=ext-authortitle-icomp,agregue citexref=truea las opciones.

\documentclass[]{scrartcl}
\usepackage[backend=biber,style=ext-authortitle-icomp, citexref=true]{biblatex}

\begin{filecontents}{\jobname.bib}
@incollection{inproc1,
  author   = {Test Author},
  crossref = {proc},
  pages    = {1--10},
  title    = {Testing the Title},
}
@incollection{inproc2,
  author   = {Test Author},
  crossref = {proc},
  pages    = {10--20},
  title    = {Testing the second Title},
}
@collection{proc,
  editor    = {Senor Editor and Senora Editora},
  publisher = {Any Publisher},
  title     = {My Proceedings},
  year      = {2013},
}
@inproceedings{inproc3,
  author    = {Nother Author},
  publisher = {Nother Publisher},
  title     = {In Some Other Proceedings},
  maintitle = {Main Title of Other Proceedings},
  year      = {2001},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
Test \autocite{inproc1} and \autocite{inproc2}
and \autocite{inproc3}
\printbibliography
\end{document}

Autor, Prueba. “Probando el segundo Título”. En: Editor y Editora, My Proceedings, págs. 10-20.

Esto no da los "eds". en las citas breves, ya que simplemente refleja las citas normales. "Eds." Se puede agregar modificando ligeramente el citebibmacro.

\documentclass[]{scrartcl}
\usepackage[backend=biber,style=ext-authortitle-icomp, citexref=true]{biblatex}

\newbibmacro{cite:labelname}{%
  \printnames{labelname}%
  \iffieldequalstr{labelnamesource}{author}
    {\setunit{\printdelim{authortypedelim}}%
     \usebibmacro{authorstrg}}
    {\iffieldequalstr{labelnamesource}{editor}
       {\setunit{\printdelim{editortypedelim}}%
        \usebibmacro{editor+othersstrg}}
       {\iffieldequalstr{labelnamesource}{translator}
         {\setunit{\printdelim{editortypedelim}}%
          \usebibmacro{translator+othersstrg}}
         {}}}}

\makeatletter
\renewbibmacro*{bbx:inxrefcite}{%
  \iffieldundef{shorthand}
    {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
       {\usebibmacro{cite:ibid}}
       {\iffieldequals{namehash}{\cbx@lasthash}
          {\setunit{\compcitedelim}}
          {\usebibmacro{cite:labelname}%
           \setunit*{\printdelim{nametitledelim}}%
           \savefield{namehash}{\cbx@lasthash}}%
        \usebibmacro{cite:title}}}%
    {\usebibmacro{cite:shorthand}%
     \usebibmacro{cite:reinit}}%
  \setunit{\multicitedelim}}
\makeatother

\begin{filecontents}{\jobname.bib}
@incollection{inproc1,
  author   = {Test Author},
  crossref = {proc},
  pages    = {1--10},
  title    = {Testing the Title},
}
@incollection{inproc2,
  author   = {Test Author},
  crossref = {proc},
  pages    = {10--20},
  title    = {Testing the second Title},
}
@collection{proc,
  editor    = {Senor Editor and Senora Editora},
  publisher = {Any Publisher},
  title     = {My Proceedings},
  year      = {2013},
}
@inproceedings{inproc3,
  author    = {Nother Author},
  publisher = {Nother Publisher},
  title     = {In Some Other Proceedings},
  maintitle = {Main Title of Other Proceedings},
  year      = {2001},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
Test \autocite{inproc1} and \autocite{inproc2}
and \autocite{inproc3}
\printbibliography
\end{document}

Autor, Prueba. “Probando el segundo Título”. En: Editor y Editora, eds., My Proceedings, págs. 10-20.

información relacionada