
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
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=lnyt
ahora.
Una solución más personalizable pero un poco más complicada utiliza el presort
campo 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 presort
campo. El presort
campo 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}
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
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}
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:
Notas
No es necesario pasar la
datatype=bibtex
opción a\maps
(como se hizo en la respuesta de Moewe), ya quebibtex
es el valor predeterminado de ladatatype
opción. Ver pág. 199 delbiblatex
manual, v. 3.18b, 12 de julio de 2022.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.El tipo de datos del valor del
presort
campo especial se interpretabiblatex
como 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 unpresort
valor de2
y a la entrada en ruso unpresort
valor de10
, la entrada en ruso habría terminado apareciendo antes de la entrada en inglés en la bibliografía.A menos que se especifique explícitamente, el campo de una entrada bibliográfica
presort
se establece automáticamente enmm
. (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 quelangid
desea ordenar, no necesita especificar explícitamente elpresort
valor de los tres. de ellos (como se hizo en la respuesta de moewe). Es suficiente especificar elpresort
valor explícito de sólo dos de ellos y asegurarse de que ambos sean lexicográficamente menores quemm
.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
nty
cuá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 cadapresort
grupo será el esperado, es decir, lo que prescribe la plantilla.Si se organiza juiciosamente, el número de
step
s ymap
s se puede reducir significativamente, y el número definal
s se puede reducir o incluso eliminar. Compare la respuesta de Moewe con mi ejemplo de "inglés primero, ruso segundo".En cuanto a la semántica de la
final
consulta.esta respuesta de moewe, ya que el manual es poco claro e incluso engañoso al respecto.