Biblatex: Zwei Bibliografien mit unterschiedlichen Stilen und Sortierungen

MWE für das aufgetretene Problem:

\documentclass{article} \usepackage{filecontents} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003 } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002 } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = www.test1.com/bild.jpg, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = www.test2.com/bild.jpg } \end{filecontents} \usepackage[backend = biber, defernumbers = true, style = alphabetic]{biblatex} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} %Append keywords to identify different bibliography entries. \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } %Declare new sorting scheme for refernence bibliography. \DeclareSortingScheme{appearance}{ \sort{\citeorder} } %Copied from numeric.cbx to imitate numerical citations. \providebool{bbx:subentry} \newbibmacro*{citenum}{%Note: the original macro was called "cite". I did not redefine "cite", but instead defined a new macro "citenum", because the author-year citations use the "cite" macro too. "\renewbibmacro*{cite}" would have caused all the author-year citations to become numeric too. \printtext[bibhyperref]{%If you ever want to use hyperref \printfield{prefixnumber}% \printfield{labelnumber}% \ifbool{bbx:subentry} {\printfield{entrysetcount}} {}}} %Copied from numeric.cbx to define a new numeric citation command for @online entries. \DeclareCiteCommand{\cnume}[\mkbibbrackets] {\usebibmacro{prenote}} {\usebibmacro{citeindex}% \usebibmacro{citenum}}%Note: this was originally "cite" but I changed it to "citenum" to avoid clashes with the author-year style. {\multicitedelim} {\usebibmacro{postnote}} \begin{document} The first two citations \cnume{LinkD01} and \cite{BookB02}. The others are \cnume{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] %Redefine the bibliography environment to imitate the numeric citation style \defbibenvironment{bibliographyNUM} {\list {\printfield[labelnumberwidth]{labelnumber}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\labelsep}{1em} \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}\hspace{-1.1em}} \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM,title=References, keyword=secondary, resetnumbers] \end{document} 

Das Problem: Ich benötige zwei Bibliografien, die erste im alphabetischen Stil und sortiert nach dem Namen des Autors. Die zweite im numerischen Stil, sortiert nach Zitierreihenfolge. Beide haben keine gemeinsamen Referenzen. Irgendwie suche ich in biblatex nach so etwas:

\bibliographystyle{style = alphabetic} \printbibliography{books.bib} \bibliographystyle{style = numerical, sorting = none} \printbibliography{links.bib} 

Ich dachte, biblatex wurde speziell für die Arbeit mit mehreren Bibliografien geschrieben, aber ich habe keine gefunden anders als in der MWE gezeigt (was offensichtlich ein Hack ist). Eigentlich funktioniert es ziemlich gut, bis ich die andere Sortierung will. Wenn ich

\newrefcontext[sorting=none] 

verwende, werden die Zitiernummern auf Null gesetzt.

Kommentare

  • biblatex wurde geschrieben, um geteilte / mehrfache Bibliografien (unter vielen anderen Funktionen) zu unterstützen, ‚ unterstützt jedoch nicht offiziell das Mischen verschiedener Bibliografien Stile in einem Dokument.

Antwort

Wenn Sie die Option labelnumber bis biblatex Sie können numerische Zitate auch mit style=alphabetic verwenden.

Der Befehl cite kann basierend auf wechseln Schlüsselwörter, sodass Sie \cite für alle Einträge verwenden können, unabhängig von keyword.

Für die numerische Bibliographie, die wir haben werden um eine neue Bibliographieumgebung zu definieren, die numerische Zitate druckt. bibliographyNUM wird direkt von numeric.bbx kopiert. Um die Sortierung für die Bibliographie festzulegen, sagen Sie einfach

\newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] 

vor der numerischen Bibliographie. In der vorherigen Bibliographie wird das globale Sortierschema anyt verwendet, das für die Bibliographie im Alpha-Stil geeignet ist. Falls die Zuordnung des Sortierschemas lokal bleiben muss (da die numerische Bibliographie vor der Alpha-Bibliographie steht), verwenden Sie

\begin{refcontext}[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{refcontext} 

MWE

\documentclass{article} \usepackage[style=alphabetic, labelnumber, defernumbers=true, backend=biber]{biblatex} \usepackage{hyperref} % Append keywords to identify different bibliography entries. % appendstrict only appends if the field is nonempty, % we use that to add a comma to avoid mushing together two keywords \DeclareSourcemap{ \maps[datatype=bibtex, overwrite]{ \map{ \perdatasource{biblatextest1.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=primary, append] } \map{ \perdatasource{biblatextest2.bib} \step[fieldset=KEYWORDS, fieldvalue={, }, appendstrict] \step[fieldset=KEYWORDS, fieldvalue=secondary, append] } } } \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifkeyword{secondary} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \defbibenvironment{bibliographyNUM} {\list {\printtext[labelnumberwidth]{% \printfield{labelprefix}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{filecontents}{biblatextest1.bib} @BOOK{BookA03, author = {Author Aaa}, title = {Some Title}, publisher = {Some Publisher}, year = 2003, keywords = {hello}, } @BOOK{BookB02, author = {Author Bbb}, title = {Some Title}, publisher = {Some Publisher}, year = 2002, } \end{filecontents} \begin{filecontents}{biblatextest2.bib} @MISC{LinkC04, author = {Author Ccc}, title = {Some Title}, year = 2004, url = {www.test1.com/bild.jpg}, keywords = {bye}, } @MISC{LinkD01, author = {Author Ddd}, title = {Some Title}, year = 2001, url = {www.test2.com/bild.jpg}, } \end{filecontents} \addbibresource{biblatextest1.bib} \addbibresource{biblatextest2.bib} \begin{document} The first two citations \cite{LinkD01} and \cite{BookB02}. The others are \cite{LinkC04} and \cite{BookA03}. \printbibliography[title=Bibliography, keyword=primary] \newrefcontext[sorting=none] \printbibliography[env=bibliographyNUM, title=References, keyword=secondary, resetnumbers] \end{document} 

Beispielausgabe

Kommentare

  • Funktioniert einwandfrei und sieht elegant aus, nachdem ich das biblatex + biber-Paket (MikTex-Benutzer) neu installiert habe. Ich wollte dies nur belassen, wenn sich jemand über “ nicht initialisierte Werte “ -Fehler wundert. Stellen Sie außerdem sicher, dass Sie alle Dateien außer .tex löschen, da diese ebenfalls Probleme verursachen können. Gute Lösung, danke.
  • @Jannik Mit einer aktuellen Version von biblatex und BIber sollte es kein “ nicht initialisierte Werte “ fliegen herum. Wenn die Versionen älter sind oder ‚ nicht übereinstimmen, funktioniert das oben Gesagte jedoch nicht. Nach einem Update tut es selten weh, die temporären Dateien zu löschen, um sicherzustellen, dass keine alten Inhalte hängen bleiben und Probleme verursachen.
  • Wenn Sie \newcommand{\letbibmacro}[2]{% \csletcs{abx@macro@#1}{abx@macro@#2}% } \letbibmacro{original-cite}{cite} hinzufügen, können Sie \usebibmacro{original-cite} in Ihrer neuen \cite -Definition, um den beim Laden ausgewählten Stil einzufügen (z. B. authoryear, …) (ersetzt ).
  • @opatut Gute Idee. In einigen Situationen ist die Platzierung des Codes jedoch entscheidend. Es ist möglicherweise auch nicht immer eine gute Idee, das Standardmakro einfach überhaupt nicht aufzurufen (insbesondere wenn es komplizierter wird und Aufräumarbeiten ausführt, denke ich ‚ an -icomp Stile hier). Hier würde es kein Problem geben, ich könnte eine Zeile nur speichern, indem ich die \if... bewege, aber Sie könnten das wieder trennen.
  • @GandalfLechner Wenn Sie möchten Um Ihre ursprünglichen Keywords beizubehalten, können Sie dies etwas besser machen. Bitte sehen Sie sich die bearbeitete Antwort an.

Antwort

Vielen Dank. Ich wollte meine angepasste Version des Problems teilen. Ich habe mein Lätzchen in Kategorien unterteilt, indem ich verschiedene Zitierwörter definiert habe. Es wurden feste Driftnet-Quellen kopiert, insbesondere biblatex: mehrere Bibliografien, die nach verschiedenen .bib-Dateien kategorisiert sind , daher ist es nicht die beste Vorgehensweise, aber es funktioniert. Hoffentlich wird biblatex native in Zukunft gemischte Bibliographiestile unterstützen.

\documentclass[fontsize=11pt,a4paper,bibliography=totoc]{scrbook} \usepackage[style=alphabetic,backend=biber,defernumbers = true]{biblatex} \addbibresource{bib/references.bib} \DeclareBibliographyCategory{pubA} \DeclareBibliographyCategory{contA} \DeclareBibliographyCategory{refs} \DeclareBibliographyCategory{relT} \defbibheading{pubA}{\section*{Publications of the Author}} \defbibheading{contA}{\section*{Contributions of the Author}} \defbibheading{refs}{\section*{References}} \defbibheading{relT}{\section*{Related Theses}} \newcommand*{\citeA}[2][]{\addtocategory{pubA}{#2}\cite[#1]{#2}} \newcommand*{\citeC}[2][]{\addtocategory{contA}{#2}\cite[#1]{#2}} \newcommand*{\citeR}[2][]{\addtocategory{refs}{#2}\cite[#1]{#2}} \renewbibmacro*{cite}{% \printtext[bibhyperref]{% \printfield{labelprefix}% \ifcategory{refs} {\printfield{labelnumber}} {\printfield{labelalpha}% \printfield{extraalpha}}}} \newcommand*{\citeT}[2][]{\addtocategory{relT}{#2}\cite[#1]{#2}} \DeclareFieldFormat{labelnumberwidth}{\mkbibbrackets{#1}} % important to get [] in bib \defbibenvironment{refsEnv} {\list {\printtext[labelnumberwidth]{% \printfield{prefixnumber}% \printfield{labelnumber}}} {\setlength{\labelwidth}{\labelnumberwidth}% \setlength{\leftmargin}{\labelwidth}% \setlength{\labelsep}{\biblabelsep}% \addtolength{\leftmargin}{\labelsep}% \setlength{\itemsep}{\bibitemsep}% \setlength{\parsep}{\bibparsep}}% \renewcommand*{\makelabel}[1]{\hss##1}} {\endlist} {\item} \begin{document} some text \citeR{<citekey>} \citeT{<citekey>}... \printbibheading[heading=bibintoc] \printbibliography[heading=subbibliography,title={Publications of the Author},category=pubA] \printbibliography[heading=subbibliography,title={Contributions of the Author},category=contA] \newrefcontext[sorting=none] \printbibliography[heading=subbibliography,title={References},category=refs,env=refsEnv,resetnumbers] \printbibliography[heading=subbibliography,title={Related Theses},category=relT] \end{document} 

Antwort

Tun Sie, was @moewe sagt, um numerische Zitate auch mit zu verwenden style=alphabetic.

Für verschiedene Sortierreihenfolgen gibt es einen viel einfacheren Weg, die refcontext -Umgebung, die eine benötigt Sortieroption: Verwenden Sie zunächst Biblatex, um Ihre Hauptbibliographie zu erstellen:

\printbibliography[title=Bibliography, keyword=primary] 

Erstellen Sie dann Ihre zweite mit verschiedenen Sortierungen, Filtern und Stilen, indem Sie sie einschließen die refcontext mit diesen als Parametern.

\begin{refcontext}[sorting=ydnt]{} % sort chronologically \printbibliography[title=References, keyword=secondary, resetnumbers] \end{refcontext} 

Die leere {} als letzter Parameter von refcontext Mit dieser Option können Sie eine Ad-hoc-Umgebung erstellen, ohne etwas anderes zu deklarieren.

Ich habe diese verwendet, als meine Schule am Ende meiner Abschlussarbeit einen Lebenslauf vorschrieb, sodass ich eine Bibliographie meiner Werke in umgekehrter Reihenfolge erstellen musste chronologische Reihenfolge zusätzlich zur üblichen AZ-Bibliographie für die Arbeit. Es war viel sauberer als das, was ich hatte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.