Biblatex: dos bibliografías con diferentes estilos y ordenaciones

MWE para el problema que encontré:

\documentclass{article} \usepackage{filecontents} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003 } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002 } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = www.test1.com/bild.jpg, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = www.test2.com/bild.jpg } \end{filecontents} \usepackage[backend = biber, defernumbers = true, style = alphabetic]{biblatex} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} %Append keywords to identify different bibliography entries. \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } %Declare new sorting scheme for refernence bibliography. \DeclareSortingScheme{appearance}{ \sort{\citeorder} } %Copied from numeric.cbx to imitate numerical citations. \providebool{bbx:subentry} \newbibmacro*{citenum}{%Note: the original macro was called "cite". I did not redefine "cite", but instead defined a new macro "citenum", because the author-year citations use the "cite" macro too. "\renewbibmacro*{cite}" would have caused all the author-year citations to become numeric too. \printtext[bibhyperref]{%If you ever want to use hyperref \printfield{prefixnumber}% \printfield{labelnumber}% \ifbool{bbx:subentry} {\printfield{entrysetcount}} {}}} %Copied from numeric.cbx to define a new numeric citation command for @online entries. \DeclareCiteCommand{\cnume}[\mkbibbrackets] {\usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{citenum}}%Note: this was originally "cite" but I changed it to "citenum" to avoid clashes with the author-year style. {\multicitedelim} {\usebibmacro{postnote}} \begin{document} The first two citations \cnume{LinkD01} and \cite{BookB02}. The others are \cnume{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] %Redefine the bibliography environment to imitate the numeric citation style \defbibenvironment{bibliographyNUM} {\list {\printfield[labelnumberwidth]{labelnumber}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\labelsep}{1em} \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}\hspace{-1.1em}} \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM,title=References, keyword=secondary, resetnumbers] \end{document} 

El problema: necesito dos bibliografías, la primera con estilo alfabético y ordenada por nombre de autor. El segundo en estilo numérico ordenado por orden de citas. Ambos no tienen referencias comunes. De alguna manera estoy buscando algo como esto en biblatex:

\bibliographystyle{style = alphabetic} \printbibliography{books.bib} \bibliographystyle{style = numerical, sorting = none} \printbibliography{links.bib} 

Pensé que biblatex está especialmente escrito para trabajar con varias bibliografías, pero no he encontrado ninguna. de otra forma que no sea la que se muestra en el MWE (que obviamente es un truco). En realidad, funciona bastante bien hasta que quiero la otra clasificación. Cuando utilizo

\newrefcontext[sorting=none] 

Los números de cita se vuelven cero.

Comentarios

  • biblatex está escrito para admitir bibliografías divididas / múltiples (entre muchas otras características), pero no ‘ t admite la mezcla de bibliografía diferente estilos en un documento.

Responder

Si pasa la opción labelnumber a biblatex puede usar citas numéricas incluso con style=alphabetic.

El comando cite puede cambiar según palabras clave, por lo que puede usar \cite para todas las entradas independientemente de keyword.

Para la bibliografía numérica tendremos definir un nuevo entorno de bibliografía que imprima citas numéricas. bibliographyNUM se copia directamente de numeric.bbx. Para establecer la clasificación de la bibliografía, simplemente diga

\newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] 

antes de la bibliografía numérica. La bibliografía anterior utilizará el esquema de clasificación global anyt que es apropiado para la bibliografía de estilo alfa. En caso de que sea necesario mantener la asignación del esquema de ordenación local (porque la bibliografía numérica viene antes que la bibliografía alfa), usaría

\begin{refcontext}[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{refcontext} 

MWE

\documentclass{article} \usepackage[style=alphabetic, labelnumber, defernumbers=true, backend=biber]{biblatex} \usepackage{hyperref} % Append keywords to identify different bibliography entries. % appendstrict only appends if the field is nonempty, % we use that to add a comma to avoid mushing together two keywords \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifkeyword{secondary} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \defbibenvironment{bibliographyNUM} {\list {\printtext[labelnumberwidth]{% \printfield{labelprefix}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003, keywords = {hello}, } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002, } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = {www.test1.com/bild.jpg}, keywords = {bye}, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = {www.test2.com/bild.jpg}, } \end{filecontents} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} \begin{document} The first two citations \cite{LinkD01} and \cite{BookB02}. The others are \cite{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{document} 

salida de ejemplo

Comentarios

  • Funciona perfectamente bien y se ve elegante después de reinstalar el paquete biblatex + biber (usuario de MikTex). Solo quería dejar esto si alguien se pregunta acerca de los errores » valor no inicializado «. También asegúrese de eliminar todos los archivos excepto .tex, ya que también pueden causar problemas. Buena solución, gracias.
  • @Jannik Con una versión actualizada de biblatex y BIber, no debería haber » valores no inicializados » volando. Sin embargo, si las versiones son anteriores o no ‘ coinciden, lo anterior no funcionará. Después de una actualización, rara vez está de más eliminar los archivos temporales para asegurarse de que ningún material antiguo se adhiera y cause problemas.
  • Si agrega \newcommand{\letbibmacro}[2]{% \csletcs{abx@macro@#1}{abx@macro@#2}% } \letbibmacro{original-cite}{cite}, puede usar \usebibmacro{original-cite} dentro de su nueva \cite definición para insertar el estilo que seleccionó en la carga (por ejemplo, authoryear, …) (reemplaza \printfield{labelalpha}\printfield{extraalpha}).
  • @opatut Buena idea. Sin embargo, en algunas situaciones, la ubicación del código es crucial. Tampoco siempre es una buena idea simplemente no llamar a la macro estándar en absoluto (especialmente si se vuelve más complicado y realiza un trabajo de limpieza, ‘ estoy pensando en -icomp estilos aquí). Aquí no habría ningún problema, solo podría guardar una línea moviendo \if..., pero podría separar eso nuevamente.
  • @GandalfLechner Si lo desea para conservar sus palabras clave originales, puede hacerlo un poco mejor. Vea la respuesta editada, por favor.

Respuesta

Muchas gracias. Quería compartir mi versión adaptada del problema. Dividí mi babero en categorías definiendo diferentes palabras de cita. Fue copiado de fuentes de driftnet firmes, especialmente biblatex: múltiples bibliografías categorizadas por diferentes archivos .bib por lo que no es la mejor práctica pero funciona. Con suerte, biblatex admitirá estilos de bibliografía mixtos en el futuro.

\documentclass[fontsize=11pt,a4paper,bibliography=totoc]{scrbook} \usepackage[style=alphabetic,backend=biber,defernumbers = true]{biblatex} \addbibresource{bib/references.bib} \DeclareBibliographyCategory{pubA} \DeclareBibliographyCategory{contA} \DeclareBibliographyCategory{refs} \DeclareBibliographyCategory{relT} \defbibheading{pubA}{\section*{Publications of the Author}} \defbibheading{contA}{\section*{Contributions of the Author}} \defbibheading{refs}{\section*{References}} \defbibheading{relT}{\section*{Related Theses}} \newcommand*{\citeA}[2][]{\addtocategory{pubA}{#2}\cite[#1]{#2}} \newcommand*{\citeC}[2][]{\addtocategory{contA}{#2}\cite[#1]{#2}} \newcommand*{\citeR}[2][]{\addtocategory{refs}{#2}\cite[#1]{#2}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifcategory{refs} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \newcommand*{\citeT}[2][]{\addtocategory{relT}{#2}\cite[#1]{#2}} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} % important to get [] in bib \defbibenvironment{refsEnv} {\list {\printtext[labelnumberwidth]{% \printfield{prefixnumber}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{document} some text \citeR{<citekey>} \citeT{<citekey>}... \printbibheading[heading=bibintoc] \printbibliography[heading=subbibliography,title={Publications of the Author},category=pubA] \printbibliography[heading=subbibliography,title={Contributions of the Author},category=contA] \newrefcontext[sorting=none] \printbibliography[heading=subbibliography,title={References},category=refs,env=refsEnv,resetnumbers] \printbibliography[heading=subbibliography,title={Related Theses},category=relT] \end{document} 

Responder

Haz lo que dice @moewe para usar citas numéricas incluso con style=alphabetic.

Para diferentes órdenes de clasificación, existe una forma mucho más sencilla, el entorno refcontext, que requiere opción de clasificación. Primero, use Biblatex para generar su bibliografía principal:

\printbibliography[title=Bibliography, keyword=primary] 

Luego, cree la segunda con diferentes tipos, filtros y estilos encerrándola en el refcontext con esos como parámetros.

\begin{refcontext}[sorting=ydnt]{} % sort chronologically \printbibliography[title=References, keyword=secondary, resetnumbers] \end{refcontext} 

El {} vacío como último parámetro de refcontext te permite crear un entorno ad hoc sin declarar nada en otro lugar.

Usé esto cuando mi escuela me pidió que incluyera un CV al final de mi tesis, así que necesitaba generar una bibliografía de mis trabajos al revés orden cronológico además de la bibliografía AZ habitual del artículo. Estaba mucho más limpio de lo que había tenido.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *