Biblatex + IEEE + autocites: Sortierung der Zitate? Thema ist als GELÖST markiert

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


Fenrix
Forum-Anfänger
Forum-Anfänger
Beiträge: 19
Registriert: Sa 9. Mai 2020, 13:45

Biblatex + IEEE + autocites: Sortierung der Zitate?

Beitrag von Fenrix »

Hallo zusammen, folgendes Beispiel:

\documentclass[a4paper,12pt, oneside, headsepline, listof = totocnumbered, numbers=noenddot]{scrartcl}

\usepackage{filecontents}

\begin{filecontents}{mybib.bib}
	@book{wolffMicroservicesFlexibleSoftware2017,
		title = {Microservices: {{Flexible Software Architecture}}},
		author = {Wolff, Eberhard},
		date = {2017},
		publisher = {{Addison-Wesley}},
		location = {{Boston}},
		isbn = {978-0-13-465044-9 978-0-13-460241-7},
		langid = {english},
		annotation = {OCLC: 1047861037}
	}
	
@book{richardsMicroservicesAntiPatternsPitfalls2016,
	title = {Microservices {{AntiPatterns}} and {{Pitfalls}}},
	author = {Richards, Mark and Safari, an O'Reilly Media Company},
	date = {2016},
}
\end{filecontents}

\usepackage[
backend=biber,
style=ieee,
uniquelist=minyear,
doi=false,isbn=false, url=false
]{biblatex}
\addbibresource{mybib.bib}


\begin{document}
	
Erster Abschnitt \autocite{wolffMicroservicesFlexibleSoftware2017}.

Zweiter Abschnitt \autocite{richardsMicroservicesAntiPatternsPitfalls2016}

Dritter Abschnitt \autocites{richardsMicroservicesAntiPatternsPitfalls2016}{wolffMicroservicesFlexibleSoftware2017}

\printbibliography
\end{document}

Ist es möglich autocites irgendwie beizubringen, dass Zitate automatisch sortiert werden? Also im Beispiel beim dritten Abschnitt [1, 2] statt [2, 1]. Insbesondere wenn man öfter mal aus einer Quelle zitiert und diese Quelle nachträglich weiter vorne einbaut, änders sich die Nummern der Zitate gerne mal.

Wenn man dann mehrere Quellen zitiert, steht da dann gerne sowas wie:
[5, 6, 7, 1, 8, 9] statt wie gewünscht [1, 5, 6, 7, 8, 9].

Vllt. hat da jemand einen Tipp :)


MoeWe
Forum-Meister
Forum-Meister
Beiträge: 801
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Biblatex + IEEE + autocites: Sortierung der Zitate?

Beitrag von MoeWe »

Standardmäßig kann biblatex Multicite-Befehle wie \autocites, \cites, \parencites etc. nicht sortieren. (Korrekter wäre: biblatex kann innerhalb von geschweiften Klammern, aber nicht über geschweifte Klammern hinweg sortieren.)

Wenn Du die optionalen Argument nicht brauchst, ist es möglich

\autocite{sigfridsson,worman}

statt

\autocites{sigfridsson}{worman}

zu schreiben. Dann funktioniert auch die Sortierung wie gewünscht.

Das kann man mit etwas gehacke in bestimmten Fällen umgehen. Siehe z.B. https://tex.stackexchange.com/q/65809/35864.

Wenn Du echten IEEE-Stil willst, der für Mehrfachzitate verlangt, dass jede Quelle in ihren eigenen Klammern steht, dann probiers mit.

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[
  backend=biber,
  style=ieee,
  autocite=plain,
]{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{%
  \ifcsundef{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
    {}
    {\global\csletcs{cbx@sortkeys}{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}}}
\def\cbx@sortkeys{}

\makeatother

\addbibresource{biblatex-examples.bib}

\begin{document}	
Erster Abschnitt \autocite{worman}.

Zweiter Abschnitt \autocite{sigfridsson}

Dritter Abschnitt \autocites{worman}{sigfridsson}

Vierter Abschnitt \autocites{sigfridsson}{worman}

Fünfter Abschnitt \autocite{sigfridsson,worman}

Sechster Abschnitt \autocite{worman,sigfridsson}

\printbibliography
\end{document}

Für den von Dir in der Frage gewünschten Stil würde ich lieber gleich numeric-comp als Basis für die Zitate nehmen

\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[
  backend=biber,
  style=ieee,
  citestyle=numeric-comp,
]{biblatex}

\makeatletter
% original definition of \...cites
\DeclareMultiCiteCommand{\cbx@cites}[\mkbibbrackets]{\cite}{\multicitedelim}
\DeclareMultiCiteCommand{\cbx@parencites}[\mkbibbrackets]{\parencite}{\multicitedelim}

% new definition
\DeclareMultiCiteCommand{\cites}[\cbx@cite@wrapper\cbx@cites]{\cbx@cite}{}
\DeclareMultiCiteCommand{\parencites}[\cbx@cite@wrapper\cbx@parencites]{\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{%
  \ifcsundef{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}
    {}
    {\global\csletcs{cbx@sortkeys}{blx@dlist@entry@\the\c@refsection @\blx@refcontext@context}}}
\def\cbx@sortkeys{}

\makeatother

\addbibresource{biblatex-examples.bib}

\begin{document}	
Erster Abschnitt \autocite{worman}.

Zweiter Abschnitt \autocite{sigfridsson}

Dritter Abschnitt \autocites{worman}{sigfridsson}

Vierter Abschnitt \autocites{sigfridsson}{worman}

Fünfter Abschnitt \autocite{sigfridsson,worman}

Sechster Abschnitt \autocite{worman,sigfridsson}

\printbibliography
\end{document}

Fenrix
Forum-Anfänger
Forum-Anfänger
Beiträge: 19
Registriert: Sa 9. Mai 2020, 13:45

Re: Biblatex + IEEE + autocites: Sortierung der Zitate?

Beitrag von Fenrix »

Vielen Dank, funktioniert perfekt :)


Antworten