von Gast » Do 7. Feb 2019, 08:28
Denn Sinn und Zweck von defernumbers kannst Du im folgenden Beispiel beobachten. Kompilier es erst mit defernumbers=false (also ohne die Option) und Du bekommst [1], [4]//[2], [3]. Wenn Du es mit defernumbers=true kompilierst, bekommst Du die erwartete Reihenfolge [1], [2]//[3], [4].
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, defernumbers=false, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,cicero,nussbaum,aksin}
\printbibliography[type=article,title=Paper]
\printbibliography[type=book,title=Bücher]
\end{document}
Normalerweise ist die Nummerierung der Einträge nämlich an ihre Sortierung gekoppelt und zwar so, dass einfach alle Einträge nach ihrer Position in der globalen Sortierung ihre Nummer bekommen. Da im Beispiel die globale Sortierreihenfolge aksin, cicero, nussbaum, sigfridsson ist, ergibt sich ohne defernumbers=true das erste Bild mit den scheinbar unsortierten Zahlen in den Verzeichnissen. Für geteilte Verzeichnisse ist es sinnvoller, die Zahlen nach der Reihenfolge des ersten Auftretens in einem Verzeichnis zu vergeben. Sortiert wird noch immer gleich, aber die Einträge der einzelnen Verzeichnisse werden dann nacheinander abgearbeitet, was im Allgemeinen (wenn keine Doppelbelegung vorhanden ist) dazu führt, dass die Einträge in den einzelnen Verzeichnissen kontinuierlich sind. Also [1], [2]//[3], [4].
Da Du auf meine Nachfrage mit einem Beispiel zu geteilten Verzeichnissen kamst, bei dem die Nummerierung merkwürdig war, dachte ich, dass Dir defernumbers helfen könnte. Denn die Option ist eigentlich fast immer sinnvoll, wenn man geteilte Literaturverzeichnisse im numerischen Stil hat (früher hat biblatex dazu sogar eine meiner Meinung nach sehr sinnvolle Warnung ausgegeben, aber die wurde entfernt:
https://github.com/plk/biblatex/issues/493). Wenn ich ganz genau hingesehen hätte, hätte ich natürlich gesehen, dass die Reihenfolge innerhalb der einzelnen Verzeichnisse ([3], [2] und [4], [1]) dafür spricht, dass defernumbers allein nicht gut genug ist. Das ist mir entgangen.
Nun zu Deinem Problem mit der Sortierung: Biber kann die Einträge nur nach Kriterien sortieren, zu denen es Zugang hat. Das sind zuallererst die Daten in der .bib-Datei aber auch die von biblatex zurückgemeldete Zitierreihenfolge. Andere Kriterien sind mir gerade nicht bekannt.
Das heißt, dass es absolut kein Problem ist, die Einträge nur chronologisch aufsteigend oder chronologisch absteigend zu sortieren. Es gibt zum Beispiel die Schemata ynt und ydnt (wenn Du genauere Sortierungen mit Monat und Tag willst, kann man mit DeclareSortingTemplate recht einfach selbst etwas basteln). Mit etwas Trickserei kannst Du auch beklopptere Sortierungen hinbekommen.
Was nicht geht, ist dass Biber Deine Gedanken liest und nach der Liste in kannstmasehns Kopf sortiert. Aber wenn diese Liste auf einem sinnvollen Schema beruht, dass nur auf den Daten in der .bib-Datei basiert, besteht die Chance, dass man das in eine Schema gießen kann.
Wenn Du eine total willkürliche Reihenfolge möchtest, dann kannst Du das im anderen Faden erwähnte sortkey-Feld nutzen (presort würde ich lassen). Bei der Benutzung dieses Feldes ist zu beachten, dass die Sortierung als Zeichenkette (String) stattfindet und nicht als ganze Zahl, wenn man also mit der naheliegenden Methode arbeitet, einfach eine Zahl in das Feld zu schreiben, sollte man an führende Nullen denken, sonst wird 11 nach 1 aber vor 2 einsortiert.
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{appleby,
author = {Humphrey Appleby},
title = {On the Importance of the Civil Service},
date = {1980},
sortkey = {02}
}
@article{sigfridsson,
author = {Sigfridsson, Emma and Ryde, Ulf},
title = {Comparison of methods for deriving atomic charges from the
electrostatic potential and moments},
journal = {Journal of Computational Chemistry},
date = 1998,
volume = 19,
number = 4,
pages = {377-395},
doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
sortkey = {01},
}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
date = {1972},
sortkey = {04}
}
@book{uthor,
author = {Alice Uthor},
title = {Title},
date = {1960},
sortkey = {03}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Wer auf die führenden Nullen verzichten möchte, muss sich was eigenes basteln
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\begin{filecontents*}{sortkeyint.dbx}
\DeclareDatamodelFields[type=field, datatype=integer]{sortkeyint}
\DeclareDatamodelEntryfields{sortkeyint}
\end{filecontents*}
\usepackage[style=numeric, backend=biber, datamodel=sortkeyint]{biblatex}
\DeclareSortingTemplate{sortkeyint}{
\sort{
\field{presort}
}
\sort[final]{
\field{sortkeyint}
}
}
\ExecuteBibliographyOptions{sorting=sortkeyint}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{appleby,
author = {Humphrey Appleby},
title = {On the Importance of the Civil Service},
date = {1980},
sortkeyint = {2}
}
@article{sigfridsson,
author = {Sigfridsson, Emma and Ryde, Ulf},
title = {Comparison of methods for deriving atomic charges from the
electrostatic potential and moments},
journal = {Journal of Computational Chemistry},
date = 1998,
volume = 19,
number = 4,
pages = {377-395},
doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
sortkeyint = {1},
}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
date = {1972},
sortkeyint = {04}
}
@book{uthor,
author = {Alice Uthor},
title = {Title},
date = {1960},
sortkeyint = {03}
}
@book{elf,
author = {Editha Lf},
title = {Albion},
date = {2000},
sortkeyint = {11}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
Im Allgemeinen geht sortkey also. Nur stellt sich heraus, dass in dem von Dir im Beispiel verwendeten Schema sorting=debug das Feld gerade keine Rolle spielt (ebenso wenig wie presort), denn da haben wir
\DeclareSortingTemplate{debug}{
\sort{
\field{entrykey}
}
}
Nun schreibst Du aber
kannstmasehn hat geschrieben:Für die Sortierung ist die Ausgabeform ja nicht relevant. Es ging erstmal darum, dass die Reihenfolge manipulierbar ist, ohne dass etwas an den Quelldaten verändert wird.
Das geht dann doch etwas schwieriger, da dann sortkey ja rausfällt. Man kann sich dann, wie bereits von einem anderen Gast gestern (20:12) erwähnt, mit sorting=none behelfen, indem man zum Beispiel die Liste in der gewünschten Reihenfolge \nocited.
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, sorting=none, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\nocite{sigfridsson,worman}
\printbibliography
\newrefsection
\nocite{worman,sigfridsson}
\printbibliography
\end{document}
Du siehst, dass in den unterschiedlichen Abschnitten die Verzeichnisse anders sortiert sind, aber beide dieselben unveränderten .bib-Daten nutzen.
Theoretisch könnte man den sortkey auch mit einer Biber-Sourcemap spontan im .tex-Dokument erzeugen, ohne die .bib-Daten zu ändern, aber da stellst sich mir die Frage, was der Vorteil gegenüber \nocite wäre. Da kommt es dann stark auf Deinen exakten Anwendungsfall an.
Denn Sinn und Zweck von [tt]defernumbers[/tt] kannst Du im folgenden Beispiel beobachten. Kompilier es erst mit [tt]defernumbers=false[/tt] (also ohne die Option) und Du bekommst [1], [4]//[2], [3]. Wenn Du es mit [tt]defernumbers=true[/tt] kompilierst, bekommst Du die erwartete Reihenfolge [1], [2]//[3], [4].
[code]\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, defernumbers=false, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,cicero,nussbaum,aksin}
\printbibliography[type=article,title=Paper]
\printbibliography[type=book,title=Bücher]
\end{document}[/code]
Normalerweise ist die Nummerierung der Einträge nämlich an ihre Sortierung gekoppelt und zwar so, dass einfach alle Einträge nach ihrer Position in der globalen Sortierung ihre Nummer bekommen. Da im Beispiel die globale Sortierreihenfolge [tt]aksin, cicero, nussbaum, sigfridsson[/tt] ist, ergibt sich ohne [tt]defernumbers=true[/tt] das erste Bild mit den scheinbar unsortierten Zahlen in den Verzeichnissen. Für geteilte Verzeichnisse ist es sinnvoller, die Zahlen nach der Reihenfolge des ersten Auftretens in einem Verzeichnis zu vergeben. Sortiert wird noch immer gleich, aber die Einträge der einzelnen Verzeichnisse werden dann nacheinander abgearbeitet, was im Allgemeinen (wenn keine Doppelbelegung vorhanden ist) dazu führt, dass die Einträge in den einzelnen Verzeichnissen kontinuierlich sind. Also [1], [2]//[3], [4].
Da Du auf meine Nachfrage mit einem Beispiel zu geteilten Verzeichnissen kamst, bei dem die Nummerierung merkwürdig war, dachte ich, dass Dir [tt]defernumbers[/tt] helfen könnte. Denn die Option ist eigentlich fast immer sinnvoll, wenn man geteilte Literaturverzeichnisse im numerischen Stil hat (früher hat [tt]biblatex[/tt] dazu sogar eine meiner Meinung nach sehr sinnvolle Warnung ausgegeben, aber die wurde entfernt: https://github.com/plk/biblatex/issues/493). Wenn ich ganz genau hingesehen hätte, hätte ich natürlich gesehen, dass die Reihenfolge innerhalb der einzelnen Verzeichnisse ([3], [2] und [4], [1]) dafür spricht, dass [tt]defernumbers[/tt] allein nicht gut genug ist. Das ist mir entgangen.
Nun zu Deinem Problem mit der Sortierung: Biber kann die Einträge nur nach Kriterien sortieren, zu denen es Zugang hat. Das sind zuallererst die Daten in der [tt].bib[/tt]-Datei aber auch die von [tt]biblatex[/tt] zurückgemeldete Zitierreihenfolge. Andere Kriterien sind mir gerade nicht bekannt.
Das heißt, dass es absolut kein Problem ist, die Einträge nur chronologisch aufsteigend oder chronologisch absteigend zu sortieren. Es gibt zum Beispiel die Schemata [tt]ynt[/tt] und [tt]ydnt[/tt] (wenn Du genauere Sortierungen mit Monat und Tag willst, kann man mit [tt]DeclareSortingTemplate[/tt] recht einfach selbst etwas basteln). Mit etwas Trickserei kannst Du auch beklopptere Sortierungen hinbekommen.
Was nicht geht, ist dass Biber Deine Gedanken liest und nach der Liste in kannstmasehns Kopf sortiert. Aber wenn diese Liste auf einem sinnvollen Schema beruht, dass nur auf den Daten in der [tt].bib[/tt]-Datei basiert, besteht die Chance, dass man das in eine Schema gießen kann.
Wenn Du eine total willkürliche Reihenfolge möchtest, dann kannst Du das im anderen Faden erwähnte [tt]sortkey[/tt]-Feld nutzen ([tt]presort[/tt] würde ich lassen). Bei der Benutzung dieses Feldes ist zu beachten, dass die Sortierung als Zeichenkette (String) stattfindet und nicht als ganze Zahl, wenn man also mit der naheliegenden Methode arbeitet, einfach eine Zahl in das Feld zu schreiben, sollte man an führende Nullen denken, sonst wird 11 nach 1 aber vor 2 einsortiert.
[code]\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{appleby,
author = {Humphrey Appleby},
title = {On the Importance of the Civil Service},
date = {1980},
sortkey = {02}
}
@article{sigfridsson,
author = {Sigfridsson, Emma and Ryde, Ulf},
title = {Comparison of methods for deriving atomic charges from the
electrostatic potential and moments},
journal = {Journal of Computational Chemistry},
date = 1998,
volume = 19,
number = 4,
pages = {377-395},
doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
sortkey = {01},
}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
date = {1972},
sortkey = {04}
}
@book{uthor,
author = {Alice Uthor},
title = {Title},
date = {1960},
sortkey = {03}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}[/code]
Wer auf die führenden Nullen verzichten möchte, muss sich was eigenes basteln
[code]\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\begin{filecontents*}{sortkeyint.dbx}
\DeclareDatamodelFields[type=field, datatype=integer]{sortkeyint}
\DeclareDatamodelEntryfields{sortkeyint}
\end{filecontents*}
\usepackage[style=numeric, backend=biber, datamodel=sortkeyint]{biblatex}
\DeclareSortingTemplate{sortkeyint}{
\sort{
\field{presort}
}
\sort[final]{
\field{sortkeyint}
}
}
\ExecuteBibliographyOptions{sorting=sortkeyint}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{appleby,
author = {Humphrey Appleby},
title = {On the Importance of the Civil Service},
date = {1980},
sortkeyint = {2}
}
@article{sigfridsson,
author = {Sigfridsson, Emma and Ryde, Ulf},
title = {Comparison of methods for deriving atomic charges from the
electrostatic potential and moments},
journal = {Journal of Computational Chemistry},
date = 1998,
volume = 19,
number = 4,
pages = {377-395},
doi = {10.1002/(SICI)1096-987X(199803)19:4<377::AID-JCC1>3.0.CO;2-P},
sortkeyint = {1},
}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
date = {1972},
sortkeyint = {04}
}
@book{uthor,
author = {Alice Uthor},
title = {Title},
date = {1960},
sortkeyint = {03}
}
@book{elf,
author = {Editha Lf},
title = {Albion},
date = {2000},
sortkeyint = {11}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}[/code]
Im Allgemeinen geht [tt]sortkey[/tt] also. Nur stellt sich heraus, dass in dem von Dir im Beispiel verwendeten Schema [tt]sorting=debug[/tt] das Feld gerade keine Rolle spielt (ebenso wenig wie [tt]presort[/tt]), denn da haben wir
[code]\DeclareSortingTemplate{debug}{
\sort{
\field{entrykey}
}
}[/code]
Nun schreibst Du aber
[quote="kannstmasehn"]Für die Sortierung ist die Ausgabeform ja nicht relevant. Es ging erstmal darum, dass die Reihenfolge manipulierbar ist, ohne dass etwas an den Quelldaten verändert wird.[/quote]
Das geht dann doch etwas schwieriger, da dann [tt]sortkey[/tt] ja rausfällt. Man kann sich dann, wie bereits von einem anderen Gast gestern (20:12) erwähnt, mit [tt]sorting=none[/tt] behelfen, indem man zum Beispiel die Liste in der gewünschten Reihenfolge [tt]\nocite[/tt]d.
[code]\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, sorting=none, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\nocite{sigfridsson,worman}
\printbibliography
\newrefsection
\nocite{worman,sigfridsson}
\printbibliography
\end{document}[/code]
Du siehst, dass in den unterschiedlichen Abschnitten die Verzeichnisse anders sortiert sind, aber beide dieselben unveränderten [tt].bib[/tt]-Daten nutzen.
Theoretisch könnte man den [tt]sortkey[/tt] auch mit einer Biber-Sourcemap spontan im [tt].tex[/tt]-Dokument erzeugen, ohne die [tt].bib[/tt]-Daten zu ändern, aber da stellst sich mir die Frage, was der Vorteil gegenüber [tt]\nocite[/tt] wäre. Da kommt es dann stark auf Deinen exakten Anwendungsfall an.