Open LukasCBossert opened 8 years ago
Die multicite-Befehle können über Multi-Argumente hinweg eigentlich nicht sortieren, das hängt damit zusammen wie die Befehle implementiert sind. Wenn es denn unbedingt sein muss, dann gibt es auf TeX.SX Sorting citations using \cites command in biblatex und zur Erweiterung Biblatex: Sorting citations in qualified citation list \parencites.
Ich weiß gerade nicht, ob \textcites
vielleicht schon automatisch sortieren kann, aber das kann man ja rausfinden.
Danke für die schnelle Antwort. Schade, dass das (noch?) nicht implementiert ist. Ich habe die auf TeX.SX vorgestellten Lösungen zwar eingebaut, aber dennoch kommen Fehlermeldungen. `! Undefined control sequence.
Hm, wo ersetze ich den biber-spezifischen Code?
Wenn ich direkt vor \addbibresource
setze, kommt
Package biblatex Info: Redefining '\cites' on input line 13.
! You can't use `\unhbox' after \the.
\leavevmode ->\unhbox
\voidb@x
l.47 ...sts@\the\c@refsection @entry@\blx@sorting}
{}{\global\letcs{\cbx@sort...
I'm forgetting what you said and using zero instead.
! Missing \endcsname inserted.
Ok, gefunden und eingebaut.
% internal list of sorted entry keys
\def\cbx@sortkeysinit{%
\ifcsundef{blx@sort@\the\c@refsection}
{\ifcsundef{blx@slists@\the\c@refsection @entry@\blx@sorting}{}{\global\letcs{\cbx@sortkeys}{blx@slists@\the\c@refsection @entry@\blx@sorting}}}% Biber
{\global\letcs{\cbx@sortkeys}{blx@sort@\the\c@refsection}}}% BibTeX
\def\cbx@sortkeys{}
Es gibt zwar keine Fehlermeldung mehr, aber dafür auch kein Ergebnis:
Tja, vielleicht haben sich in den letzten paar Jahren (und besonders den letzten paar Monaten) die Innereien von biblatex
so geändert, dass es jetzt nicht mehr funktioniert.
In biblatex
3.3 wird das Sortieren jetzt von der refsection übernommen, das müsste wohl angepasst werden. Ich habe jetzt gerade nicht so die Zeit, mir das in aller Tiefe zu Gemüte zu führen, aber ich denke, dass sollte möglich sein.
hm, ok - vielleicht gibt es "irgendwann" eine Lösung. Solange muss wohl händisch sortiert werden. Aber vielleicht kann das auf die Issue-Liste von biblatex
?! Besten Dank für die Hilfe!
War es schon https://github.com/plk/biblatex/issues/214, Audrey schrieb damals, dass eine vernünftige Lösung wohl nur schwer in biblatex
direkt implementiert werden könnte, da dabei einiges umgeworfen werden müsste.
oh - ich sollte wohl besser nachschauen... Ok, dann ist/bleibt es ein bekanntes Problem.
Mit den Anpassungen in http://tex.stackexchange.com/q/314199/35864 funktioniert der Code in http://tex.stackexchange.com/q/65809/35864 mit biblatex
3.5 zumindest wieder. Es gelten aber noch immer die genannten Einschränkungen, das die Multi-Notes verloren gehen.
Seit wann ist biblatex
3.5 raus? Es hat bei mir noch nicht aktualisiert.
Wäre dies dann ein passendes MWE?
\documentclass[german,english,ngerman]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[ %% use for bibliography
backend=biber,
%style=../biblatex-archaeologie/archaeologie,
style=archaeologie,
lstabbrv,
lstlocations,
lstpublishers,
publisher,
sortcites=true,
sorting=ynt
]{biblatex}
\makeatletter
% original definition of \cites
\DeclareMultiCiteCommand{\cbx@cites}{\cite}{\multicitedelim}
% new definition
\DeclareMultiCiteCommand{\cites}[\cbx@cite@wrapper\cbx@cites]{\cbx@cite}{}
% first pass saves keys, prenotes, postnotes
\DeclareCiteCommand{\cbx@cite}
{\csxdef{prenote:\thefield{entrykey}}{\thefield{prenote}}}
{\listxadd\cbx@savekeys{\thefield{entrykey}}}
{}
{\csxdef{postnote:\thefield{entrykey}}{\thefield{postnote}}}
% second pass outputs sorted citation list
\newrobustcmd{\cbx@cite@wrapper}[2]{%
\def\cbx@savekeys{}%
\def\cbx@citecall{#1}%
#2\cbx@sortkeysinit\cbx@citesort\cbx@citecall}
% internal list of saved keys => sorted argument list
\def\cbx@citesort{%
\def\do##1{%
\ifinlist{##1}{\cbx@savekeys}
{\protected@xappto\cbx@citecall{%
[\csuse{prenote:##1}][\csuse{postnote:##1}]{##1}}}
{}}%
\dolistloop{\cbx@sortkeys}}
% internal list of sorted entry keys
\def\cbx@sortkeysinit{%
\ifcsdef{blx@slist@centry@\the\c@refsection @\blx@refcontext@context} {\global\letcs{\cbx@sortkeys}{blx@slist@centry@\the\c@refsection %
@\blx@refcontext@context}}{}}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{massa,knuth:ct,pines,iliad}\\
\cites{massa}{knuth:ct}{pines}{iliad}\\
\cites(vgl.)(){massa}{knuth:ct}{pines}{iliad}\\
\cites{massa}[23]{knuth:ct}[vgl.][212]{pines}[s.][]{iliad}\\
\parencites(s.)(){massa}[23]{knuth:ct}{pines}{iliad}\\
\textcites(s.)(){massa}[23]{knuth:ct}{pines}{iliad}
\end{document}
Was meinst du damit, dass die Multi-Notes verloren gehen?
Bis auf das Kommentar-bei-TeX.SX-Copy-and-Paste-Problem (manchmal schleichen sich merkwürdige Zeichen ein, hier im \the\c@refsection
vor dem %
) und das fehlende \def\cbx@sortkeys{}
sieht das gut, aus.
Bei mir wäre es
\documentclass[german,english,ngerman]{article}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[ %% use for bibliography
backend=biber,
%style=../biblatex-archaeologie/archaeologie,
style=archaeologie,
lstabbrv,
lstlocations,
lstpublishers,
publisher,
sortcites=true,
sorting=ynt
]{biblatex}
\makeatletter
% original definition of \cites
\DeclareMultiCiteCommand{\cbx@cites}{\cite}{\multicitedelim}
% new definition
\DeclareMultiCiteCommand{\cites}[\cbx@cite@wrapper\cbx@cites]{\cbx@cite}{}
% first pass saves keys, prenotes, postnotes
\DeclareCiteCommand{\cbx@cite}
{\csxdef{prenote:\thefield{entrykey}}{\thefield{prenote}}}
{\listxadd\cbx@savekeys{\thefield{entrykey}}}
{}
{\csxdef{postnote:\thefield{entrykey}}{\thefield{postnote}}}
% second pass outputs sorted citation list
\newrobustcmd{\cbx@cite@wrapper}[2]{%
\def\cbx@savekeys{}%
\def\cbx@citecall{#1}%
#2\cbx@sortkeysinit\cbx@citesort\cbx@citecall}
% internal list of saved keys => sorted argument list
\def\cbx@citesort{%
\def\do##1{%
\ifinlist{##1}{\cbx@savekeys}
{\protected@xappto\cbx@citecall{%
[\csuse{prenote:##1}][\csuse{postnote:##1}]{##1}}}
{}}%
\dolistloop{\cbx@sortkeys}}
% internal list of sorted entry keys
\def\cbx@sortkeysinit{%
\ifcsdef{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}
{\global\letcs{\cbx@sortkeys}{blx@slist@centry@\the\c@refsection @\blx@refcontext@context}}
{}}
\def\cbx@sortkeys{}
\makeatother
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{massa,knuth:ct,pines,iliad}\\
\cites{massa}{knuth:ct}{pines}{iliad}\\
\cites(vgl.)(){massa}{knuth:ct}{pines}{iliad}\\
\cites(A)(B){massa}[23]{knuth:ct}[vgl.][212]{pines}[s.][]{iliad}\\
\parencites(A)(B){massa}[23]{knuth:ct}{pines}{iliad}\\
\textcites(A)(B){massa}[23]{knuth:ct}{pines}{iliad}
\end{document}
Schau dir genau an, wie \cites
das "A" und "B" verhunzt. Das ist das, was ich meinte, das steht als Warnung am Ende von Audreys Antwort.
bibilatex
3.5 ist seit etwa einer Woche draußen und inzwischen auch bei MikTeX und TeX live.
Laut TeXLive sind meine Pakete alle aktuell, aber die log-file
sagt: Package: biblatex 2016/05/14 v3.4 programmable bibliographies (PK/JW/AB)
, also habe ich noch version 3.4
drauf?
Dennoch: Mit deinem verbesserten MWE läuft es durch.
So wie ich das sehe, ist das Ergebnis sehr durchwachsen, und manchmal klappt es mit A
und B
wie bspw. bei parencites
und textcites
, dafür sind die Einträge bei diesen nicht mehr sortiert.
Die aktuelle Version ist 3.5 (https://www.ctan.org/pkg/biblatex), allerdings scheint TeX live da gerade etwas hinterher zu sein. Das sollte aber bald ins Lot kommen, solange musst Du halt noch warten.
Beachte, dass mit Version 3.5 die Datumsausgabe umgestellt wurde, es kann sein, dass Du da Einiges anpassen musst.
Wenn Du Dir den Code genau ansiehst, wirst Du feststellen, dass er nur \cites
ändert, \parencites
und \textcites
werden nicht modifiziert. Dementsprechend sortiert auch nur \cites
die Argumente, vergeigt aber die Multi-Notes; während die anderen beiden nicht sortieren, aber die Notes dahaben. Siehe auch http://tex.stackexchange.com/q/271307/35864
Wie dem auch sei, ich wollte nur darauf hinweisen, dass es theoretisch auch mit den neueren Versionen möglich ist die Multicites zu sortieren, empfehlen würde ich es immer noch nicht.
Gerade habe ich auf biblatex
3.5 aktualisierst. Werde das also jetzt mal testen.
Wenn es aber noch nicht 'wirklich' klappt, dann lohnt sich die Implementierung in archaeologie.cbx
nicht.
Ich denke, dass es kein
archaeologie-Stil
spezifisches Problem ist, aber die Sortierung bei\cites{ab}{cd}
funktioniert (bei keinem Stil?) nicht.führt zu:
Dabei sollte aber nach Name, Jahr, Titel sortiert werden (wie in der
.cbx
angegeben).Kann man das lösen? @moewew ?