Editar

Editar

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):

insira a descrição da imagem aqui

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}

insira a descrição da imagem aqui

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:

insira a descrição da imagem aqui

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 refcontextambiente em torno do segundo printbibliography, obterá a saída desejada.

informação relacionada