
Estou tentando usar o biblatex para produzir duas bibliografias diferentes. O primeiro deverá conter apenas meus artigos, ordenados por ordem de aparecimento no texto e com algum prefixo especial. A segunda bibliografia deve conter as referências gerais, ordenadas em alguma ordem diferente (digamos, nome-título-ano), e sem prefixo especial.
Observe que as duas bibliografias NÃO SE CRUZAM (ou seja, não possuem entradas comuns).
Eu uso este MTW:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{ref.bib}
@ARTICLE{Pub1,
author = {A. R},
title = {My best paper},
year = {2013},
journal = C,
keywords = {publication}
}
@ARTICLE{Pub2,
author = {A. R},
title = {My second best paper},
year = {2013},
journal = C,
keywords = {publication}
}
@ARTICLE{Nopub1,
author = {A. R},
title = {Not my paper 1},
year = {2012},
journal = I,
keywords = {general}
}
@ARTICLE{Nopub2,
author = {A. R},
title = {Not my paper 2},
year = {2012},
journal = I,
keywords = {general}
}
\end{filecontents}
\usepackage[style=numeric, sorting=none, defernumbers=true, backend=biber]{biblatex}
\addbibresource{ref.bib}
\pagestyle{empty}
\begin{document}
This is my first publication : \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]
\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, prefixnumbers=, title=Not my papers]
\end{refcontext}
\end{document}
SAÍDA (após pdflatex + biber + pdflatex + pdflatex):
Ambas as bibliografias são impressas corretamente e bem ordenadas, mas as citações do texto referentes à segunda bibliografia estão erradas (são todas [0]). Tentei verificar outras postagens relacionadas, mas ninguém mencionou esse problema específico.
Obrigado!
Responder1
Não creio que atualmente exista uma boa solução. Mas tentarei explicar alguns antecedentes. No seu exemplo, a saída desejada parece óbvia, pois suas duas bibliografias não se sobrepõem. Mas isso não precisa ser o caso. Em diferentes contextos de referência, as entradas podem ser repetidas. Então vamos ver o que acontece se você remover os filtros:
\documentclass{article}
\usepackage[style=numeric, sorting=none, backend=biber]{biblatex}
\addbibresource{ref.bib}
\pagestyle{empty}
\begin{document}
This is my first publication : \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[title=Not my papers]
\newrefcontext[sorting=nty]
This is my first publication: \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[prefixnumbers=R,title=My papers]
\end{document}
Como você pode ver, cada bibentry possui dois rótulos e o biblatex deve escolher qual deles usar. Sensivelmente, ele usa para o primeiro bloco de citações os rótulos do primeiro refcontext (padrão) e para o segundo bloco os rótulos do segundo bloco.
Isso explica por que você obtém zeros: no primeiro bloco as citações não têm um rótulo e o biblatex não tem chance de adivinhar que você deseja um rótulo de outro refcontext como substituto - afinal, pode haver mais de um rótulo adequado.
O rótulo que o biblatex usará para uma citação depende do valor atual de \blx@refcontext@sorting
. Então você pode forçar localmente o biblatex a usar rótulos de outro refcontext fazendo
{
\makeatletter\def\blx@refcontext@sorting{nty}
These are not my publications: \cite{Nopub1,Nopub2}
}
Então você pode obter algo assim:
Mas esta solução não funcionaria para cidades mistas como \cite{Nopub1,pub1}
. E a solução "lógica"
\AtEveryCitekey{\ifkeyword{puplication}{}{\def\blx@refcontext@sorting{nty}}}
também não funciona, pois o código para refcontext é executado antes que \AtEveryCitekey possa entrar em ação. Então, provavelmente você terá que fazer uma solicitação de recurso ...
Editar
Você poderia tentar isso. Mas esteja avisado: é um hack e é bem possível que confunda o biblatex. Portanto teste e verifique cuidadosamente com mais dados.
\documentclass{article}
\usepackage[style=numeric, sorting=none, defernumbers, backend=biber]{biblatex}
\addbibresource{ref.bib}
\pagestyle{empty}
\makeatletter
\AtEveryCitekey{\ifkeyword{publication}{}{\def\blx@refcontext@sorting{nty}%
\csname blx@data@\the \c@refsection @\blx@refcontext@sorting @\abx@field@entrykey\endcsname}}
\makeatother
\begin{document}
This is my first publication : \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]
\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, prefixnumbers=, title=Not my papers]
\end{refcontext}
\end{document}
Responder2
refcontexts foram introduzidos para esse tipo de coisa - comandos de citação dentro de refcontexts compartilham o contexto, então coloque a citação "Estas não são minhas publicações:" dentro do mesmo refcontext.
\assignrefcontextentries[sorting=nty]{Nopub1,Nopub2}
\begin{document}
This is my first publication: \cite{Pub1}
These are not my publications: \cite{Nopub1,Nopub2}
This is my second publication: \cite{Pub2}
\printbibliography[keyword=publication, prefixnumbers=R, title=My papers]
\begin{refcontext}[sorting=nty]
\printbibliography[notkeyword=publication, title=Not my papers]
\end{refcontext}
\end{document}
Isso requer biblatex 3.3
Responder3
O problema vem do uso de um arquivo refcontext
. Se você remover o refcontext
ambiente em torno do segundo printbibliography
, obterá a saída desejada.