Agrupación de bibliografías ordenadas por idioma

Agrupación de bibliografías ordenadas por idioma

Sé que puedo agrupar bibliografías por palabra clave. Pero este no es un caso, porque si no uso orden alfabético y estilo numérico puedo dividir la bibliografía por palabras clave. Pero si quiero bibliografía ordenada y numeración numérica e intento dividirla, romperé la numeración. Lo que necesito es tener elementos babero de algún idioma antes que los de otro idioma. Ejemplo:

\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage[english,greek,russian]{babel} % English please
\setmainfont[
BoldFont={DeJavu Serif Bold},
ItalicFont={DeJavu Serif Italic},
BoldItalicFont={DeJavu Serif BoldItalic}
]{DeJavu Serif}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@Book{AlKarapan,
author = {Καραπαναγοπούλου, Αλέξανδρος Κ.},
title = {Η Μεγάλη Σύνοδος της Ορθοδόξου Ανατολικής Εκκλησίας},
publisher = {auto-édition},
date = {1990/1998},
volumes = {6},
address = {Αθήνα},
langid={greek},
}
@Inbook{CypinIstorijaRPC,
author = {Владислав Цыпин},
title = {История Русской Церкви 1917--1997},
chapter = {VIII},
publisher = {Издательство Спасо-Преображенского Валаамского монастыря},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
url = {http://old.pravoslavie.by/podpod.asp?id=135&Session=10},
langid={russian},
}
@Inbook{authorrus,
    author = {Другой Автор},
    title = {Название},
    chapter = {VIII},
    publisher = {Издательство},
    address = {Москва},
    date = {1997},
    urldate = {2010-10-25},
    langid={russian},
}
@article{baez/article,
    author       = {Baez, John C. and Lauda, Aaron D.},
    title        = {Higher-Dimensional Algebra {V}: 2-Groups},
    journaltitle = {Theory and Applications of Categories},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    annotation   = {An \texttt{article} with \texttt{eprint} and
        \texttt{eprinttype} fields. Note that the arXiv reference is
        transformed into a clickable link if \texttt{hyperref} support
        has been enabled.  Compare \texttt{baez\slash online}, which
        is the same item given as an \texttt{online} entry},
    hyphenation={english},
}
@article{another,
    author       = {Another,Author and One more, Author},
    title        = {Title},
    journaltitle = {Journal},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    hyphenation={english},
}
\end{filecontents*}

\usepackage[russian,greek,english]{babel}
\usepackage[natbib=true,
style=numeric,
isbn=true,
url=true,
defernumbers=false,
sorting=nyt, 
firstinits=true,
backend=biber,
language=auto,  
autolang=other]{biblatex}

\addbibresource{\jobname.bib}

\begin{document}
\cite{AlKarapan,CypinIstorijaRPC,baez/article}
\nocite{*}
\printbibliography
\end{document}

El resultado será: elementos en inglés, en griego y en ruso. Si edito el archivo bbl, simplemente muevo las entradas rusas al principio, luego las entradas griegas y la última entrada en inglés yno corras bibersimplemente cite las entradas y ejecute lualatex o xelatex, todo estará bien.

Biblatex/Biber clasifica la bibliografía y muevo manualmente las entradas para un idioma determinado en un archivo bbl. Obtengo entradas ordenadas para un idioma determinado y el orden de idioma que quiero.

Pregunta: ¿puedo hacer este tipo de pedido sin editar el archivo bbl?

esto es lo que estoy tratando de conseguir bibliografía después de mover entradas

No puedo usar varios dorsales porque necesito una numeración continua

Respuesta1

Por supuesto, uno puede simplemente poner un \sort{\field{langid}}en el procedimiento de clasificación, pero eso ordenará los idiomas lexicográficamente, por lo que el inglés aparecerá primero, luego el griego y luego el ruso, no exactamente lo que desea.

Pero dicho sea de paso, si clasificamosdescendiendolexicográficamente obtenemos el orden que deseas en el MWE.

\DeclareSortingScheme{lnyt}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort[direction=descending]{\field{langid}}
  \sort{
    \field{sortname}
    \field{author}
    \field{editor}
    \field{translator}
    \field{sorttitle}
    \field{title}
  }
  \sort{
    \field{sortyear}
    \field{year}
  }
  \sort{
    \field{sorttitle}
    \field{title}
  }
  \sort{
    \field[padside=left,padwidth=4,padchar=0]{volume}
    \literal{0000}
  }
}

Por supuesto, esto se debe únicamente a que el orden de clasificación deseado coincide con el orden lexicográfico inverso de los nombres de los idiomas.

Usar sorting=lnytahora.


Una solución más personalizable pero un poco más complicada utiliza el presortcampo y la función de mapeo de fuentes de Biber.

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=langid, match=\regexp{\Arussian\Z}, final]
      \step[fieldset=presort, fieldvalue=1]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Agreek\Z}, final]
      \step[fieldset=presort, fieldvalue=2]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Aenglish\Z}, final]
      \step[fieldset=presort, fieldvalue=3]
    }
  }
}

Cada idioma simplemente se asigna a un número que se escribe en el presortcampo. El presortcampo se considera antes que los demás campos de clasificación.

Esto permite criterios de clasificación que no siguen ningún orden lexicográfico.

MWE

\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage[english,greek,russian]{babel} % English please
\setmainfont[
BoldFont={DeJavu Serif Bold},
ItalicFont={DeJavu Serif Italic},
BoldItalicFont={DeJavu Serif BoldItalic}
]{DeJavu Serif}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@Book{AlKarapan,
author = {Καραπαναγοπούλου, Αλέξανδρος Κ.},
title = {Η Μεγάλη Σύνοδος της Ορθοδόξου Ανατολικής Εκκλησίας},
publisher = {auto-édition},
date = {1990/1998},
volumes = {6},
address = {Αθήνα},
langid={greek},
}
@Inbook{CypinIstorijaRPC,
author = {Владислав Цыпин},
title = {История Русской Церкви 1917--1997},
chapter = {VIII},
publisher = {Издательство Спасо-Преображенского Валаамского монастыря},
address = {Москва},
date = {1997},
urldate = {2010-10-25},
url = {http://old.pravoslavie.by/podpod.asp?id=135&Session=10},
langid={russian},
}
@Inbook{authorrus,
    author = {Другой Автор},
    title = {Название},
    chapter = {VIII},
    publisher = {Издательство},
    address = {Москва},
    date = {1997},
    urldate = {2010-10-25},
    langid={russian},
}
@article{baez/article,
    author       = {Baez, John C. and Lauda, Aaron D.},
    title        = {Higher-Dimensional Algebra {V}: 2-Groups},
    journaltitle = {Theory and Applications of Categories},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    annotation   = {An \texttt{article} with \texttt{eprint} and
        \texttt{eprinttype} fields. Note that the arXiv reference is
        transformed into a clickable link if \texttt{hyperref} support
        has been enabled.  Compare \texttt{baez\slash online}, which
        is the same item given as an \texttt{online} entry},
    hyphenation={english},
}
@article{another,
    author       = {Another,Author and One more, Author},
    title        = {Title},
    journaltitle = {Journal},
    date         = 2004,
    volume       = 12,
    pages        = {423-491},
    version      = 3,
    eprint       = {math/0307200v3},
    eprinttype   = {arxiv},
    langid       = {english},
    langidopts   = {variant=american},
    hyphenation={english},
}
\end{filecontents*}

\usepackage[russian,greek,english]{babel}
\usepackage[natbib=true,
style=numeric,
isbn=true,
url=true,
defernumbers=false,
sorting=nyt, 
firstinits=true,
backend=biber,
language=auto,  
autolang=other]{biblatex}

\addbibresource{\jobname.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=langid, match=\regexp{\Arussian\Z}, final]
      \step[fieldset=presort, fieldvalue=1]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Agreek\Z}, final]
      \step[fieldset=presort, fieldvalue=2]
    }
    \map{
      \step[fieldsource=langid, match=\regexp{\Aenglish\Z}, final]
      \step[fieldset=presort, fieldvalue=3]
    }
  }
}

\begin{document}
\cite{AlKarapan,CypinIstorijaRPC,baez/article}
\nocite{*}
\printbibliography
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

A continuación se muestra una versión simplificada de la respuesta de Moewe.


Un archivo fuente BibTeX

El siguiente archivo BibTeX está guardado en formato ~/TestBib.bib.

@book{shakespeare,
   author = {William Shakespeare},
   title = {Hamlet},
   year = {1600},
   langid = {english}
}
@book{homer,
   author = {Homer},
   title = {Illiad \& Oddysey},
   year = {8th century BC},
   langid = {greek}
}
@book{tolstoy,
   author = {Leo Tolstoy},
   title = {War and Peace},
   year = {1869},
   langid = {russian}
}

Un documento LaTeX sencillo con una bibliografía.

\documentclass{article}
\usepackage{biblatex}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}

El resultado de correr

> cd ~
> Prueba lualatex
> Prueba biber
> Prueba lualatex

es

Salida intacta


Inglés primero, los demás según el orden predeterminado.

\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap {
   \maps {
      \map {
         \step [
            fieldsource=langid,
            match=english,
            fieldset=presort,
            fieldvalue=a
         ]
      }
   }
}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}

ingles primero


Primero inglés, segundo ruso.

Ahora agregaremos un mapa de fuentes para ordenar las entradas bibliográficas de tal manera que la entrada en inglés sea la primera y la entrada en ruso la segunda.

\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap {
   \maps {
      \map {
         \step [
            fieldsource=langid,
            match=english,
            fieldset=presort,
            fieldvalue=a
         ]
         \step [
            fieldsource=langid,
            match=russian,
            fieldset=presort,
            fieldvalue=b
         ]
      }
   }
}
\addbibresource{TestBib.bib}
\begin{document}
\cite{shakespeare}\cite{homer}\cite{tolstoy}
\printbibliography
\end{document}

La salida es:

Primero inglés, segundo ruso.


Notas

  1. No es necesario pasar la datatype=bibtexopción a \maps(como se hizo en la respuesta de Moewe), ya que bibtexes el valor predeterminado de la datatypeopción. Ver pág. 199 del biblatexmanual, v. 3.18b, 12 de julio de 2022.

  2. No es necesario incluir expresiones regulares \regexp(como se hizo en la respuesta de Moewe) a menos que contengan secuencias de caracteres que también sean comandos TEX válidos. Ver pág. 204 del manual.

  3. El tipo de datos del valor del presortcampo especial se interpreta biblatexcomo una cadena, no como un número. (Consulte la página 31 del manual). Por lo tanto, el orden que se aplica a sus valores es lexicográfico en lugar de numérico. Por lo tanto, en mi opinión, es mejor evitar asignar números a este campo (como se hizo en la respuesta de Moewe), para evitar consecuencias no intuitivas. Por ejemplo, si en mi ejemplo de "inglés primero, ruso después" le hubiera asignado a la entrada en inglés un presortvalor de 2y a la entrada en ruso un presortvalor de 10, la entrada en ruso habría terminado apareciendo antes de la entrada en inglés en la bibliografía.

  4. A menos que se especifique explícitamente, el campo de una entrada bibliográfica presortse establece automáticamente en mm. (Consulte el segundo párrafo de la sección 3.6 'Opciones de clasificación' en la página 83 del manual). Por lo tanto, si hay precisamente tres valores diferentes por los que langiddesea ordenar, no necesita especificar explícitamente el presortvalor de los tres. de ellos (como se hizo en la respuesta de moewe). Es suficiente especificar el presortvalor explícito de sólo dos de ellos y asegurarse de que ambos sean lexicográficamente menores que mm.

    Este también es un dato útil para saber si quieres que determinadas entradas aparezcan en la parte superior de la bibliografía, pero no te importa especificar el orden relativo del resto de entradas, como he hecho yo en mi " Inglés primero, los demás según el ejemplo de orden predeterminado.

    Tenga en cuenta que las asignaciones de origen se realizan antes de que se aplique cualquier plantilla de clasificación, incluidas las integradas predeterminadas, descritas en los apéndices C1-C3 del manual. (Consulte el segundo párrafo de la sección 4.5.3 'Modificación dinámica de datos' en la página 199 del manual). Por lo tanto, si utiliza alguna de las plantillas de clasificación predeterminadas, indique ntycuál es la plantilla de clasificación predeterminada utilizada si no Si especifica explícitamente cualquier plantilla de clasificación (consulte la sección 3.1.2.1 'Opciones de paquete/Opciones de preámbulo/General' en la página 48 del manual), el orden de las entradas dentro de cada presortgrupo será el esperado, es decir, lo que prescribe la plantilla.

  5. Si se organiza juiciosamente, el número de steps y maps se puede reducir significativamente, y el número de finals se puede reducir o incluso eliminar. Compare la respuesta de Moewe con mi ejemplo de "inglés primero, ruso segundo".

  6. En cuanto a la semántica de la finalconsulta.esta respuesta de moewe, ya que el manual es poco claro e incluso engañoso al respecto.

información relacionada