Editar

Editar

Estoy intentando utilizar biblatex para producir dos bibliografías diferentes. El primero debe contener sólo mis trabajos, ordenados por orden de aparición en el texto, y con algún prefijo especial. La segunda bibliografía debe contener las referencias generales, ordenadas en algún orden diferente (por ejemplo, nombre-título-año) y sin prefijo especial.

Observe que las dos bibliografías NO SE INTERSECCIONAN (es decir, no tienen entradas comunes).

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

SALIDA (después de pdflatex + biber + pdflatex + pdflatex):

ingrese la descripción de la imagen aquí

Ambas bibliografías están impresas correctamente y bien ordenadas, pero las citas textuales referidas a la segunda bibliografía son incorrectas (todas son [0]). Intenté consultar otras publicaciones relacionadas, pero nadie mencionó este problema específico.

¡Gracias!

Respuesta1

No creo que actualmente exista una buena solución. Pero intentaré explicar algunos antecedentes. En su ejemplo, el resultado deseado parece obvio ya que sus dos bibliografías no se superponen. Pero este no tiene por qué ser el caso. En diferentes contextos de referencia se pueden repetir las entradas. Entonces, veamos qué sucede si eliminas los 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}

ingrese la descripción de la imagen aquí

Como puedes ver cada bibentry tiene dos etiquetas y biblatex tiene que elegir cuál usar. Con sensatez, utiliza para el primer bloque de citas las etiquetas del primer contexto de referencia (predeterminado), y para el segundo bloque las etiquetas del segundo bloque.

Esto explica por qué obtienes ceros: en el primer bloque las citas no tienen una etiqueta y biblatex no tiene posibilidad de adivinar que quieres una etiqueta de otro contexto de referencia como alternativa; después de todo, podría haber más de una etiqueta adecuada.

La etiqueta que biblatex utilizará para una cita depende del valor actual de \blx@refcontext@sorting. Entonces puedes forzar localmente a biblatex a usar etiquetas de otro contexto de referencia haciendo

{
 \makeatletter\def\blx@refcontext@sorting{nty}
 These are not my publications: \cite{Nopub1,Nopub2}
} 

Entonces puedes obtener algo como esto:

ingrese la descripción de la imagen aquí

Pero esta solución no funcionaría para ciudades mixtas como \cite{Nopub1,pub1}. Y la solución "lógica"

 \AtEveryCitekey{\ifkeyword{puplication}{}{\def\blx@refcontext@sorting{nty}}}

tampoco funciona ya que el código para refcontext se ejecuta antes de que \AtEveryCitekey pueda activarse. Así que probablemente tendrás que realizar una solicitud de función...

Editar

Podrías intentar esto. Pero tenga cuidado: es un truco y es muy posible que confunda a biblatex. Así que pruebe y verifique cuidadosamente con más datos.

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

Respuesta2

Los refcontexts se introdujeron para este tipo de cosas: los comandos de citas dentro de refcontexts comparten el contexto, por lo que coloque la cita "Estas no son mis publicaciones:" dentro del mismo 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}

Esto requiere biblatex 3.3

Respuesta3

El problema proviene del uso de un archivo diferente refcontext. Si elimina el refcontextentorno alrededor del segundo printbibliography, obtendrá el resultado deseado.

información relacionada