biblatex: gesplittete Verzeichnisse

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.
TiTo
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 7. Mai 2009, 08:55

biblatex: gesplittete Verzeichnisse

Beitrag von TiTo »

Hallo,

ich versuche, einen Drittmittelantrag mit LaTeX zu setzen. Die Anforderungen sehen zwei thematisch getrennte Literaturverzeichnisse vor (Literatur I und Literatur II). Dies habe ich mit biblatex und der Sortierung nach einem bestimmten Eintrag im keyword-Feld der bib-Datei auch umsetzen können.

Schwierigkeiten habe ich allerdings mit dem geforderten Zitierstil. Es wird mit fortlaufenden Nummern zitiert, aber zwischen Liste I und II unterschieden. Es soll folgendermaßen aussehen:

Zitierstellen aus Liste: [I-1] und [I-2] und [I-3] usw. Entsprechend sollen Einträge aus der Liste II folgendermaßen zitiert werden: [II-1] und [II-2, II-3] usw.

Wie kann man so etwas erzeugen? Aus der biblatex-Doku bin ich diesbzgl. prima vista nicht schlauer geworden...

Dank im voraus und Gruß, Tobias

Benutzeravatar
domwass
TeX-Entwickler
TeX-Entwickler
Beiträge: 617
Registriert: Di 26. Aug 2008, 12:44
Kontaktdaten:

Beitrag von domwass »

Man könnte es mit 'shorthand' lösen. Nachteil ist, dass man die Label dann manuell vergeben muss.

Code: Alles auswählen

\documentclass[ngerman]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{article,
  author = {Nachname, Vorname},
  title = {Titel des Zeitschriftenartikels},
  journal = {Zeitschrift},
  year = {2006},
  volume = {6},
  pages = {19--75},
  keywords = {lit1},
  shorthand = {I-1}
}
@BOOK{book,
  author = {Buchautor, Hans-Wilhelm},
  title = {Irgendein Buch},
  address = {Buch am Wald},
  year = {2000},
  keywords = {lit2},
  shorthand = {II-1}
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}

\usepackage[
%  style=authortitle
]{biblatex}
\bibliography{\jobname}
\defbibheading{lit1}{\section*{Literatur 1}}
\defbibheading{lit2}{\section*{Literatur 2}}

\begin{document}
\cite{article,book}

\printbibliography[keyword=lit1,heading=lit1]
\printbibliography[keyword=lit2,heading=lit2]

\end{document}
Gruß,
Dominik.-

TiTo
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 7. Mai 2009, 08:55

Beitrag von TiTo »

Vielen Dank für den ausführlichen Quelltext in der Antwort.
domwass hat geschrieben:Man könnte es mit 'shorthand' lösen. Nachteil ist, dass man die Label dann manuell vergeben muss.
...
Hm, das wäre mir zuviel Handarbeit. Außerdem wird (natürlich) kurz vor der Angst der Antrag fertig gestellt, so dass Referenzen rausfliegen oder andere hinzukommen. Da bleibt dann keine Zeit für die Änderung vieler Label, wenn sich an deren Reihenfolge etwas ändert.

Wenn es keinen Automatismus dafür gibt, dann würde ich lieber auf den gewünschten Stil verzichten und die fortlaufende Nummerierung bei getrennten Verzeichnissen wählen.

Dank & Gruß, Tobias

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2645
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Dank Dominiks vollständigem Minimalbeispiel kann ich Dir folgenden Vorschlag machen:

Code: Alles auswählen

\documentclass[ngerman]{scrartcl} 
\listfiles 
\usepackage{filecontents} 
\begin{filecontents}{\jobname.bib} 
  @ARTICLE{article1, 
    author = {Nachname, Vorname}, 
    title = {Titel des Zeitschriftenartikels}, 
    journal = {Zeitschrift 1}, 
    year = {2006}, 
    volume = {6}, 
    pages = {19--75}, 
    keywords = {lit1}
  } 
  @ARTICLE{article2, 
    author = {Nachname, Vorname}, 
    title = {Titel des Zeitschriftenartikels}, 
    journal = {Zeitschrift 2}, 
    year = {2006}, 
    volume = {6}, 
    pages = {19--75}, 
    keywords = {lit1}
  } 
  @BOOK{book1, 
    author = {Buchautor, Hans-Wilhelm}, 
    title = {Irgendein Buch 1}, 
    address = {Buch am Wald}, 
    year = {2000}, 
    keywords = {lit2}
  } 
  @BOOK{book2, 
    author = {Buchautor, Hans-Wilhelm}, 
    title = {Irgendein Buch 2}, 
    address = {Buch am Wald}, 
    year = {2000}, 
    keywords = {lit2}
  } 
\end{filecontents} 
\usepackage[T1]{fontenc} 
\usepackage[latin1]{inputenc} 
\usepackage{babel,csquotes} 
 
\usepackage[ 
% style=authortitle 
]{biblatex} 
\bibliography{\jobname} 
\defbibheading{lit1}{\section*{Literatur 1}} 
\defbibheading{lit2}{\section*{Literatur 2}} 

% Jetzt wird es haarig
\makeatletter
\newcommand*{\orig@blx@bbl@keyw}{}
\let\orig@blx@bbl@keyw\blx@bbl@keyw
\newcounter{lit@lit1}\@namedef{thelit@lit1}{I-\arabic{lit@lit1}}
\newcounter{lit@lit2}\@namedef{thelit@lit2}{II-\arabic{lit@lit2}}
\renewcommand*{\blx@bbl@keyw}[1]{%
  \stepcounter{lit@#1}%
  \begingroup
    \edef\@tempa{%
      \noexpand\endgroup
      \noexpand\field{shorthand}{\@nameuse{thelit@#1}}%
      \noexpand\field{label}{\@nameuse{thelit@#1}}%
    }
  \@tempa
  \orig@blx@bbl@keyw{#1}%
}
\makeatother

\begin{document} 
\cite{article1,article2,book1,book2} 

\printbibliography[keyword=lit1,heading=lit1] 
\printbibliography[keyword=lit2,heading=lit2] 
 
\end{document}
Der Trick dabei ist, \keyw so umzudefinieren, dass es die beiden Felder label und shorthand selbst setzt und dabei für jedes Einzelliteraturverzeichnis die Nummerierung selbst fortschreibt. Dazu werden die beiden Zähler lit@lit1 und lit@lit2 mit deren Ausgabemakros \thelit@lit1 und \thelit@lit2 verwendet.

Ob der \edef-Trick zum setzen der beiden Felder wirklich notwendig ist, habe ich nicht getestet. Mit dem Trick sollte man jedenfalls auf der sicheren Seite sein.

\@namedef und \@nameuse werden hier übrigens verwendet, weil in den keys Zeichen vorkommen, die in Makronamen normalerweise nicht vorkommen dürfen.

TiTo
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Do 7. Mai 2009, 08:55

Beitrag von TiTo »

Vielen Dank, das erledigt genau, was ich gesucht habe!

Beste Grüße, Tobias

Antworten