Na minha bibliografia, querobiblateximprimir apenas o nome do editor e o título do trabalho pai na entrada filho se o pai tiver pelo menos dois filhos, enquanto o que obtenho agora é a entrada pai completa dentro de cada entrada filho. A entrada principal deve então ser impressa por extenso sob o nome do editor. Então, em vez 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.
o que eu gostaria de conseguir é:
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.
Estou ciente de que uma pergunta semelhante foi respondidaaqui, mas simplesmente não consigo descobrir como posso manipular o código sugerido lá para que ele imprima o editor e o título. Consegui substituir o rótulo alfabético pelo título da coleção (ou anais ou livro) usando
\printfield{labeltitle}
em vez de
\printfield{labelalpha}
mas nenhum
\printfield{labelname}
nem
\printlist{labelname}
parece funcionar para obter o nome do editor. Alguma ideia do que está errado aqui? Eu adiciono um 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}
E, mais uma coisinha (um ponto muito conectado e secundário para uma pergunta extra), como posso fazer o título da coleção aparecer em itálico na entrada secundária?
Obrigado pela sua ajuda - como é meu primeiro post no TeX Stack Exchange, por favor, não hesite em me corrigir caso eu não tenha sido claro ou tenha violado alguma convenção!
Responder1
Para imprimir os nomes que você precisa \printnames{labelname}
.
Se quiser labelname
imprimir nomes completos, você precisa do arquivo \DeclareNameAlias{labelname}{given-family}
.
Para obter (ed./eds.) depois labelname
, adicione \setunit*{\addspace}\printtext[parens]{editorstrg}
.
Para obter (ed./eds.) após o editor principal em entry proc
, você precisa corrigir a bbx:editor
macro usando xpatch
, assim:
\xpatchbibmacro{bbx:editor}
{\usebibmacro{#1}}
{\setunit{\addspace}\printtext[parens]{\usebibmacro{#1}}}
{}{}
Para obter o labeltitle
itálico, você pode usar, \printfield[title]{labeltitle}
pois o formato padrão do título é itálico.
Então sua crossref:label
macro se torna:
\newbibmacro{crossref:label}{%
\entrydata{\strfield{crossref}}
{\DeclareNameAlias{labelname}{given-family}%
\printnames{labelname}%
\setunit*{\addspace}%
\printtext[parens]{\usebibmacro{editorstrg}}%
\setunit*{\addcomma\space}%
\printfield[title]{labeltitle}}}
Observação:Isso é muito específico para sua pergunta. É necessária mais personalização para lidar com casos em que labelname não se refere a um editor (por exemplo, tradutor).
Aqui está o MWE completo e a saída:
\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}
Responder2
Esse é o recurso do BibTeX do qual mais sinto falta.
Com o BibTeX, isso simplesmente funciona: é fácil, infalível e robusto.
No Biblatex, é necessário um código adicional para cada tipo de entrada e esse código deve ser adaptado à bibliografia e ao estilo de citação utilizado: é difícil, sujeito a erros, um pesadelo de manter e, portanto, extremamente frágil.
O Biblatex é obviamente muito mais poderoso e sofisticado que o BibTeX. É lamentável que bibliografias inchadas estejam entre as poucas regressões reais em comparação com o seu antecessor.
Eu acho, embora não tenha certeza, que você quer algo assim:
A seguir está uma adaptação do código que utilizo, que é adaptado de várias respostas a várias perguntas no TeX SE e de partes do código padrão do Biblatex. Eles são indicados nos comentários do 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}
Se você já possui um biblatex.cfg
, obviamente pode adicionar o código às suas personalizações existentes. Alternativamente, você pode incluir o código em seu preâmbulo da maneira usual, ou seja, colocando-o entre \makeatletter
e \makeatother
.
Se você precisar disso para tipos de entrada como @inproceedings
etc., poderá modificá-los de maneira semelhante. (Não estava claro para mim se você precisava disso ou não, então apenas resolvi o @incollection
caso, que é o único que descobri que precisava até agora.)
Responder3
Os estilos do biblatex-ext
pacote possuem uma opção chamada citexref
que permite entradas bibliográficas um pouco mais curtas.
Basta substituir style=authortitle-icomp,
por style=ext-authortitle-icomp,
e adicionar citexref=true
às opções.
\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}
Isso não dá os "eds". nas citações curtas, uma vez que apenas reflete as citações normais. "Ed." pode ser adicionado modificando ligeiramente o cite
bibmacro.
\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}