Gruppieren sortierter Bibliographien nach Lang-ID

Gruppieren sortierter Bibliographien nach Lang-ID

Ich weiß, dass ich Bibliografien nach Stichworten gruppieren kann. Aber das ist nicht der Fall, denn wenn ich keine alphabetische Sortierung und keinen numerischen Stil verwende, kann ich die Bibliografie nach Stichworten aufteilen. Aber wenn ich eine sortierte Bibliografie und eine numerische Nummerierung möchte und versuche, sie aufzuteilen, werde ich die Nummerierung unterbrechen. Was ich brauche, ist, Bibliografieeinträge einer Sprache vor Einträgen einer anderen Sprache zu haben. Beispiel:

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

Die Ausgabe lautet: Einträge in Englisch, dann in Griechisch und in Russisch. Wenn ich die BBL-Datei bearbeite, verschiebe ich nur russische Einträge am Anfang, dann griechische Einträge und den letzten englischen Eintrag undlauf nicht, Biberzitieren Sie einfach die Einträge und führen Sie lualatex oder xelatex aus, alles wird gut.

Biblatex/Biber sortiert Bibliographien und ich verschiebe Einträge manuell für eine bestimmte Sprache in der BBL-Datei. Ich erhalte Einträge, die für eine bestimmte Sprache und in der gewünschten Sprachenreihenfolge sortiert sind.

Frage: Kann ich diese Art der Bestellung durchführen, ohne die BBL-Datei zu bearbeiten?

das ist es, was ich versuche zu bekommen Bibliographie nach dem Verschieben von Einträgen

Ich kann nicht mehrere Startnummern verwenden, da ich eine fortlaufende Nummerierung benötige

Antwort1

Natürlich kann man auch einfach ein \sort{\field{langid}}in das Sortierverfahren einfügen, aber dadurch werden die Sprachen lexikografisch sortiert, so dass zuerst Englisch, dann Griechisch und dann Russisch erscheint, was nicht gerade das ist, was man möchte.

Aber übrigens, wenn wir sortierenabsteigendlexikografisch erhalten wir die gewünschte Reihenfolge im 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}
  }
}

Das liegt natürlich nur daran, dass die von Ihnen gewünschte Sortierreihenfolge mit der umgekehrten lexikografischen Reihenfolge der Sprachnamen übereinstimmt.

Jetzt benutzen sorting=lnyt.


Eine anpassbarere, aber etwas kompliziertere Lösung verwendet das presortFeld und die Sourcemapping-Funktion von 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]
    }
  }
}

Jede Sprache wird einfach einer Nummer zugeordnet, die in das presortFeld geschrieben wird. Das presortFeld wird vor den anderen Sortierfeldern berücksichtigt.

Dadurch sind Sortierreihenfolgen möglich, die keiner lexikografischen Reihenfolge folgen.

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}

Bildbeschreibung hier eingeben

Antwort2

Es folgt eine vereinfachte Version der Antwort von Moewe.


Eine BibTeX-Quelldatei

Die folgende BibTeX-Datei ist im Format .xml gespeichert ~/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}
}

Ein einfaches LaTeX-Dokument mit einer Bibliographie

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

Das Ergebnis des Laufens

> cd ~
> lualatex Test
> biber Test
> lualatex Test

Ist

Unverfälschte Ausgabe


Zuerst Englisch, dann die anderen in der Standardreihenfolge

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

Englisch zuerst


Zuerst Englisch, dann Russisch

Wir werden nun eine Quellenzuordnung hinzufügen, um die bibliographischen Einträge so zu ordnen, dass der englische Eintrag an erster Stelle und der russische an zweiter Stelle steht.

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

Die Ausgabe ist:

Zuerst Englisch, dann Russisch


Anmerkungen

  1. datatype=bibtexEs ist nicht erforderlich, die Option an zu übergeben \maps(wie in der Antwort von moewe), da dies bibtexder Standardwert der datatypeOption ist. Siehe S. 199 des biblatexHandbuchs, Version 3.18b, 12. Juli 2022.

  2. Es ist nicht nötig, reguläre Ausdrücke einzuschließen \regexp(wie in Moewes Antwort), es sei denn, sie enthalten Zeichenfolgen, die auch gültige TEX-Befehle sind. Siehe S. 204 des Handbuchs.

  3. Der Datentyp des Wertes des presortSpezialfelds wird von biblatexals Zeichenfolge und nicht als Zahl interpretiert. (Siehe S. 31 des Handbuchs.) Die Reihenfolge, die für die Werte gilt, ist daher lexikografisch und nicht numerisch. Daher ist es meiner Meinung nach am besten, die Zuweisung von Zahlen zu diesem Feld zu vermeiden (wie in moewes Antwort), um nicht intuitive Konsequenzen zu vermeiden. Wenn ich beispielsweise in meinem Beispiel „Englisch zuerst, Russisch danach“ dem englischen Eintrag den presortWert 2und dem russischen Eintrag den presortWert zugewiesen hätte 10, wäre der russische Eintrag in der Bibliografie vor dem englischen Eintrag erschienen.

  4. Sofern nicht ausdrücklich angegeben, wird das Feld eines bibliographischen Eintrags presortautomatisch auf gesetzt mm. (Siehe den zweiten Absatz von Abschnitt 3.6 „Sortieroptionen“ auf S. 83 des Handbuchs.) Wenn Sie also genau drei verschiedene Werte von langidsortieren möchten, müssen Sie nicht den presortWert aller drei explizit angeben (wie in der Antwort von moewe). Es reicht aus, den expliziten Wert von nur zwei davon anzugeben presortund sicherzustellen, dass beide lexikografisch kleiner als sind mm.

    Dies ist auch eine nützliche Information, wenn Sie möchten, dass bestimmte Einträge oben in der Bibliografie erscheinen, Sie aber die relative Reihenfolge der übrigen Einträge nicht festlegen möchten, wie ich es in meinem Beispiel „Zuerst Englisch, die anderen gemäß der Standardreihenfolge“ getan habe.

    Beachten Sie, dass die Quellzuordnungen erfolgen, bevor eine Sortiervorlage angewendet wird, einschließlich der standardmäßig integrierten Vorlagen, die in den Anhängen C1-C3 des Handbuchs beschrieben sind. (Siehe den zweiten Absatz von Abschnitt 4.5.3 „Dynamische Datenänderung“ auf S. 199 des Handbuchs.) Wenn Sie also eine der Standardsortiervorlagen verwenden, d. h. ntywelche die standardmäßig verwendete Sortiervorlage ist, wenn Sie keine Sortiervorlage explizit angeben (siehe Abschnitt 3.1.2.1 „Paketoptionen/Präambeloptionen/Allgemeines“ auf S. 48 des Handbuchs), ist die Reihenfolge der Einträge innerhalb jeder presortGruppe wie erwartet, d. h. wie von der Vorlage vorgeschrieben.

  5. Bei umsichtiger Anordnung kann die Anzahl der steps und maps erheblich reduziert werden, und die Anzahl der finals kann reduziert oder sogar eliminiert werden. Vergleichen Sie Moewes Antwort mit meinem Beispiel „Erst Englisch, dann Russisch“.

  6. Zur Semantik von finalconsultdiese Antwort von moewe, da das Handbuch diesbezüglich unklar und sogar irreführend ist.

verwandte Informationen