biblatex, authoryear: crossref/xref mit Kurzverweis möglich?

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


uli
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Fr 30. Apr 2010, 11:56
Wohnort: Oldenburg

biblatex, authoryear: crossref/xref mit Kurzverweis möglich?

Beitrag von uli »

Hallo,
ich suche eine Möglichkeit, die authoryear-Stile von biblatex so anzupassen, dass bei Verwendung von crossref oder xref im Literaturverzeichnis ein Kurzverweis für den Sammelband erscheint, sobald dieser zweimal zitiert wird. Momentan wird er zwar ab zweifacher Zitation eigenständig eingetragen, aber im Literatureintrag der Einzelbeiträge ist trotzdem der komplette Literaturverweis enthalten. Das bläht ja nun das Literaturverzeichnis mehr als unnötig auf (konkret ist ein Werk jetzt einmal eigenständig und dreimal vollständig als Verweis eingetragen).

Derzeit verwende ich biblatex 0.8e und den authoryear-icomp-tt (der versuchte Umstieg auf biblatex 0.9. führte zu massiven Problemen, würde aber vermutlich auch nicht helfen).

Während es im Text alles genauso aussieht, wie es soll, habe ich das crossref/xref-Problem noch nicht lösen können. Offensichtlich ist die Funktion im authoryear-Stil nicht implementiert. Obwohl ich mich mit LaTex recht gut auskenne, habe ich keine Vorstellung, wie ich die fehlenden Funktionen selber schreiben und einbauen soll. Vielleicht gibt es diese Funktionen in anderen Stilen? Wenn ja freue ich mich über Codeschnipsel und eine Anleitung, wo diese einzubauen sind!
Uli
 % Hier mein (hoffentlich korrekt erstelltes) Minimalbeispiel

\begin{filecontents*}{meins.bib}
% Die Einträge haben testweise unterschiedliche Formate, macht aber keinen Unterschied

@INCOLLECTION{liedunimo,
  author = {Liedtke, Max},
  title = {Die Vernetzung von Systemen als evolutives Konstruktionsprinzip},
  pages = {59--77},
  crossref = {unimo},
  owner = {uli},
  timestamp = {2008.11.05}
}

@INCOLLECTION{tremunimo,
  author = {Treml, Alfred K.},
  title = {Globalisierung als Raumerweiterung. Phylogenetische und ontogenetische
	Lernprozesse},
  pages = {181-205},
  booktitle = {Universalistische Moral und weltbürgerliche Erziehung. Die Herausforderung
	der Globalisierung im Horizont der modernen Evolutionsforschung},
  crossref = {unimo},
  owner = {uli},
  publisher = {IKO -- Verlag für interkulturelle Kommunikation},
  timestamp = {2008.04.02},
  year = {2001}
}


@INCOLLECTION{volunimo,
  author = {Eckard Voland},
  title = {Ziele, Chancen und Grenzen weltbürgerlicher Erziehung -- Kritische
	Zwischenrufe eines Soziobiologen in eine pädagogische Debatte},
  pages = {326-340},
  xref = {unimo},
  address = {Frankfurt},
  booktitle = {Universalistische Moral und weltbürgerliche Erziehung. Die Herausforderung
	der Globalisierung im Horizont der modernen Evolutionsforschung},
  owner = {uli},
  publisher = {IKO -- Verlag für interkulturelle Kommunikation},
  timestamp = {2008.04.02},
  year = {2001}
}


@COLLECTION{unimo,
  booktitle = {Universalistische Moral und weltbürgerliche Erziehung. Die Herausforderung
	der Globalisierung im Horizont der modernen Evolutionsforschung},
  editor = {Görgens, Sigrid and Scheunpflug, Anette and Stojanov, Krassimir},
  publisher = {IKO -- Verlag für interkulturelle Kommunikation},
  year = {2001},
  shorthand = {Görgens et al. 2001},
  address = {Frankfurt},
  owner = {uli},
  timestamp = {2008.08.21},
  title = {Universalistische Moral und weltbürgerliche Erziehung. Die Herausforderung
	der Globalisierung im Horizont der modernen Evolutionsforschung}
}

\end{filecontents*}

\documentclass[12pt]{scrreprt}%draft markiert unsaubere Zeilenumbrüche

\usepackage{lmodern} %die Latinmodern-Schriften sind die Nachfolger der Computern modern. Die Schrift ist (zumindest in sans serif) breiter als ohne das package.

\usepackage[T1]{fontenc} %Verwendung "richtiger" Umlaute statt zusammengesetzter Zeichen. Verbessert die Silbentrennung (sonst werden Worte nach Umlauten nicht mehr getrennt)

\usepackage[utf8]{inputenc} %direkte Eingabe von Umlauten, Verwendung des utf8 Zeichensatzes (alternativ: latin1)

\usepackage[english,ngerman]{babel} %Sprachpaket, besonders für mehrsprachige Dokumente. Letzte Sprache ist Standardsprache des Dokuments, auf alle anderen kann im Dokument mit \selectlanguage{} umgeschaltet werden. Wichtig für die richtige Silbentrennung.


  \usepackage[babel,german=quotes]{csquotes}

%------------------------------------
% Packete und Befehle für biblatex:
\usepackage
[backend=bibtex,
maxnames=2,
natbib=true,
uniquename=init,
style=authoryear-icomp-tt,
block=space,
pagetracker=page,
ibidtracker=constrict,
idemtracker=constrict,
mincrossrefs=2
]
{biblatex}

\bibliography{meins}

\renewcommand*{\nameyeardelim}{\space} %entfernt das komma zwischen Autor und Jahr
\renewcommand*{\multinamedelim}{\addslash}% Bibliographie für / zwischen Autorennamen
\renewcommand*{\finalnamedelim}{\addslash} % Entfernt das 'und' zwischen den letzten beiden Namen einer Liste und ersetzt durch /

\renewcommand*{\labelnamepunct}{\addcolon\space}% Bibliographie: setzt statt punkt einen Doppelpunkt nach der Jahreszahl

%------------------------------------------
\DeclareNameFormat{sortname}{% Bibliographie damit alle Namen nach dem Muster Nachname, Vorname sortiert werden
\iffirstinits
{\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}}
{\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}}%
\usebibmacro{name:andothers}} 

%------------------------------
\renewbibmacro*{author}{% So steht statt - bei mehreren Werken eines Autors jedesmal wieder der Autorenname
\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{author}}
{\printnames{author}%
\setunit{\addspace}}%
{\global\undef\bbx@lasthash
\printfield{label}%
\setunit*{\addspace}}%
\usebibmacro{year+labelyear}} 

%-----------------------------
\renewbibmacro*{editor}{% dito für Editoren
\ifthenelse{\ifuseauthor\AND\NOT\ifnameundef{editor}}
{\printnames{editor}%
\setunit{\addspace}}%
{\global\undef\bbx@lasthash
\printfield{label}%
\setunit*{\addspace}}%
\usebibmacro{year+labelyear}} 

%-----------------------------
\DeclareFieldFormat{postnote}{#1}% entfernt das ``S.'' vor der Seitenzahl
\DeclareFieldFormat[article]{title}{#1} % Anführungszeichen aus dem Artikeltitel entfernen
\DeclareFieldFormat[incollection]{title}{#1}% Anführungszeichen aus dem Titel von Sammelbandeinträgen entfernen

%-------------------------------------

\begin{document}

Dies ist ein Text \citep[vgl.][73]{volunimo}
Auch \citet{liedunimo} schreibt, genauso wie auch \citet[84]{tremunimo}.

Viel Blabla \citet[76]{tremunimo \cites(vgl. auch)()[]{volunimo}[]{liedunimo}.

\printbibliography[maxnames=99]

\end{document}

% Ende des Dokumentes 
[geändert von domwass (Moderator), 2010-04-30, 14:32:
-> Code-Umgebung „repariert“]

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

Re: biblatex, authoryear: crossref/xref mit Kurzverweis mögl

Beitrag von domwass »

uli hat geschrieben:Vielleicht gibt es diese Funktionen in anderen Stilen? Wenn ja freue ich mich über Codeschnipsel und eine Anleitung, wo diese einzubauen sind!
Nur ein kurzer Hinweis auf meine biblatex-dw-Stile: dort habe ich so etwas
für authortitle eingebaut. Schau dir einfach mal die Stildateien an
(authortitle-dw.bbx und authortitle-dw.cbx) und such nach „xref“, dann
solltest du ein paar Codeschnipsel haben, die dir evtl. weiterhelfen.

Ich habe mir übrigens erlaubt, deinen Beitrag zu „reparieren“, da bei der
Verwendung der Code-Umgebung offensichtlich etwas schiefgelaufen ist.

Gruß,
Dominik.- (Moderator)

uli
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Fr 30. Apr 2010, 11:56
Wohnort: Oldenburg

Beitrag von uli »

Hallo Dominik,
vielen Dank für die schnelle Antwort! Da ich einen Autor-Jahr-Stil brauche, hatte ich mir deine Dateien noch nicht so genau angesehen, aber vielleicht kann ich dort tatsächlich herausholen, was ich brauche.
Das meiste zu xref steht allerdings in der standard-dw.bbx, in der autortitle-dw.bbx habe ich jetzt gar nichts zu xref gefunden und den Teil aus der .cbx brauche ich vermutlich nicht (weil ich ja im Text nicht mit Titel zitiere). Das ist allerdings echt ne Menge Code (von dem ich grob verstehe was er macht, aber nicht unbedingt warum) und ich vermute fast, dass ich meine standard.bbx anpassen sollte. Ich werde das mal versuchen und berichten.
Uli

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

Beitrag von domwass »

Sorry, hab schon lange nicht mehr in meine Dateien reingeschaut, weil ich
momentan nicht dazu komme. Du hast natürlich recht, viel des xref-Codes
steht in standard-dw.bbx. Wenn du Probleme bei der Umsetzung hast, meld
dich einfach wieder hier.

Gruß,
Dominik.-

uli
Forum-Newbie
Forum-Newbie
Beiträge: 3
Registriert: Fr 30. Apr 2010, 11:56
Wohnort: Oldenburg

Beitrag von uli »

Hey,
mit viel Lesen, Grübeln, Herumprobieren habe ich jetzt eine relativ simple Lösung hin bekommen, die für mich gut funktioniert. Theoretisch ist es auch so in der Dokumentation des biblatex-Package beschrieben, in Kombination mit den Dateien von Dominik habe ich es dann auch irgendwann verstanden. Stellenweise ist es möglicherweise etwas gepfuscht, aber da es für mich funktioniert, bin ich zufrieden (für Verbesserungsvorschläge aber offen).
Damit es vielleicht auch anderen weiterhilft, hier halbwegs ausführlich, was ich gemacht habe:

1. Die standard.bbx unter neuem Namen gespeichert und den BibliographyDriver für incollection wie folgt geändert (Änderungen für article. inbook etc. können analog erfolgen):
\DeclareBibliographyDriver{incollection}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author/translator+others}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \usebibmacro{in:}%
\iffieldundef{xref}
{% begin if no xref
\usebibmacro{maintitle+booktitle}%
  \newunit\newblock
  \usebibmacro{byeditor+others}%
  \newunit\newblock
  \printfield{edition}%
  \newunit
  \iffieldundef{maintitle}
    {\printfield{volume}%
     \printfield{part}}
    {}%
  \newunit
  \printfield{volumes}%
  \newunit\newblock
  \usebibmacro{series+number}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{publisher+location+year}%
  \newunit\newblock
} % end if no xref
{\bbx@xref{\thefield{xref}}} % if xref
  \usebibmacro{chapter+pages}%
  \newunit\newblock
  \printfield{isbn}%
  \newunit\newblock
  \printfield{doi}%
  \newunit\newblock
  \usebibmacro{eprint}
  \newunit\newblock
  \usebibmacro{url+urldate}%
  \newunit\newblock
  \printfield{addendum}%
  \newunit\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}
[\code]

2. die authoryear.cbx (bzw. die authoryear-icomp-tt.cbx) unter neuem Namen gespeichert und folgendes eingefügt:

[code]
% code for xref  (eigentlich das textcite-bibmacro plus rechte Klammer, damit der Kurzverweis das Format Autor (Jahr) bekommt)
\newbibmacro*{cite:xref}{%
  \ifnameundef{labelname}
    {\iffieldundef{shorthand}
       {\usebibmacro{cite:label}%
	\setunit{%
	  \global\booltrue{cbx:parens}%
	  \addspace\bibleftparen}%
	\usebibmacro{cite:year+labelyear}}
       {\usebibmacro{cite:shorthand}}}
    {\printnames{labelname}%
     \setunit{%
       \global\booltrue{cbx:parens}%
       \addspace\bibleftparen}%
     \iffieldundef{shorthand}
       {\iffieldundef{year}
          {\usebibmacro{cite:label}}
          {\usebibmacro{cite:year+labelyear}}}
       {\usebibmacro{cite:shorthand}}
		\unspace\bibrightparen}}

% code for xref
\DeclareCiteCommand{\bbx@xref}
	{}%
	{\usebibmacro{cite:xref}}%
	{}%
	{}%
[\code]

3. In den Dateien authoryear.bbx  und authoryear-icomp-tt.bbx bei  
[code]
\RequireBibliographyStyle{} 
[\code]
meine geänderten Dateien eingetragen-

4. In tex-Datei unter den biblatex-Optionen

 mincrossrefs=1

eingetragen, damit alle zitierten Sammelbände einen eigenen Bibiliographyeintrag bekommen, weil bei den incollection-Einträgen jetzt nur noch Kurzverweise erscheinen.

Gruß, Uli

Antworten