Eigener Bibliographietreiber cite:driver & iffieldundef

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


Gast

Eigener Bibliographietreiber cite:driver & iffieldundef

Beitrag von Gast »

Hallo,

ich schreibe gerade einen eigenen Bibliographietreiber für rechtliche Dokumente. Leider komme ich schon früh nicht weiter.

Wenn ich das richtig verstanden habe, wird die Ausgabe der Literaturangabe im Text (also durch einen cite Befehl) durch \DeclareBibliographyDriver{cite:driver-name} definiert, richtig?
Mein Problem ist, dass trotz dieser Definition meine Literaturangabe im Text mit title year ausgegeben wird, was hier leider falsch ist.

Und im Literaturverzeichnis funktioniert mein Macro für die Ausgabe des Feldes date nicht. Egal, was drin steht, es wird nichts (bzw hier "abc" für Testzwecke) ausgegeben.

MB:
\documentclass[fontsize=12pt,paper=a4,titlepage,twoside=false,headings=normal]{scrartcl}

%%%%% BEGINN: Spracheinrichtung %%%%%
 % Deutsche Sprachunterstützung (Worttrennung, etc.)
\usepackage[ngerman]{babel}
 % Unicode Eingabe
\usepackage[utf8]{inputenc}
 % Sonderzeichen verfügbar machen
\usepackage[T1]{fontenc}
 % Eurozeichen verfügbar machen
\usepackage{eurosym}
\DeclareUnicodeCharacter{20AC}{\euro}
%%%%% ENDE: Spracheinrichtung %%%%%



%%%%% BEGINN: Seiteneinrichtung %%%%%
%% Schriftarten
 % Überschriften auf Times stellen
\addtokomafont{sectioning}{\rmfamily}
 % Schriftartfamilie auf Times stellen
\usepackage{txfonts}

%% Absatzformatierung
 % Zeilenabstand: eineinhalb
\usepackage{setspace}
\onehalfspacing
 % Neue Absätze ohne Einrückung aber mit Zeilenabstand
\parindent 0pt
\parskip 10pt
 % Hurenkinder und Schusterjungen vermeiden
\clubpenalty10000
%%%%% ENDE: Seiteneinrichtung %%%%%



%%%%% BEGINN: Bibliographieeinrichtung %%%%%
%% Biblatex zur Literaturverwaltung
\usepackage[style=authoryear,
%  			citestyle=authoryear,
%  			bibstyle=authoryear,
 			language=ngerman,
 			sorting=nyt,
 			date=short,
 			% natbib Unterstützung
 			natbib=true,
 			% Im Literaturverzeichnis Seiten der Quellenangaben anzeigen 
 			backref=false,
 			hyperref=false,
 			% Vor- und Mittelname abkürzen
 			firstinits=false,
  			backend=biber]{biblatex}
 % Bibliographiedatei
\begin{filecontents*}{Bibliographie.bib}
@legal{ARES601,
  journaltitle = {A/RES},
  type = {resolution},
  number = {60/1},
  date = {2005-09-16},
  title = {2005 World Summit Outcome},
}
\end{filecontents*}
\bibliography{Bibliographie.bib}
\usepackage{csquotes}
%%%%% ENDE: Bibliographieeinrichtung %%%%%


\DeclareBibliographyDriver{legal}{%
	\iffieldequalstr{type}{resolution}
		{\usebibmacro{resolution}}%
		{\usebibmacro{legal}}%
	\addspace%
	\usebibmacro{legaldate}
	\addcolon\addspace%
	\printfield{title}%
	\adddot\addspace%
	\printfield{subtitle}%
	\finentry%
}
\newbibmacro*{legaldate}{%
	\iffieldundef{date}%
		{abc}%
		{\mkbibparens{%
			\printtext{v.}%
			\addspace%
			\printdate%
			}%
		}%
}
\newbibmacro*{resolution}{%
	\printfield{journaltitle}%
	\printtext{/}%
	\printfield{number}%
}
\newbibmacro*{legal}{%
	\printfield{journaltitle}%
	\addspace%
	\printfield{number}%
}

\DeclareBibliographyDriver{cite:legal}{%
	\iffieldequalstr{type}{resolution}
		{\usebibmacro{cite:resolution}}%
		{\usebibmacro{cite:legal}}%
}%

\newbibmacro*{cite:resolution}{%
	\printfield{journaltitle}%
	\printtext{/}%
	\printfield{number}%
}

\newbibmacro*{cite:legal}{%
	\printfield{journaltitle}%
	\addspace%
	\printfield{number}%
}


%%%%% ENDE: Präambel %%%%%
%%%%% BEGINN: Dokument %%%%%

\begin{document}

Lorem Ipsum \autocite[Nr. 138]{ARES601} Ipsum Lorem

\newpage
\printbibliography

\end{document}
Ausgabe:
Lorem Ipsum (2005 World Summit Outcome 2005, Nr. 138) Ipsum Lorem
-----
Literatur
A/RES/60/1 abc: 2005 World Summit Outcome.
Richtig wäre:
Lorem Ipsum (A/RES/60/1: Nr. 138) Ipsum Lorem
-----
Literatur
A/RES/60/1 (v. 16.09.2005): 2005 World Summit Outcome.
Wo liegt mein Fehler?

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Wenn ich das richtig verstanden habe, wird die Ausgabe der Literaturangabe im Text (also durch einen cite Befehl) durch \DeclareBibliographyDriver{cite:driver-name} definiert, richtig?
Nein, das deklariert die Formatierung in der "Bibliography". Du brauchst \DeclareCiteCommand.

Gast

Beitrag von Gast »

Hallo,

aber mit \DeclareCiteCommand erstelle ich doch neue Zitierbefehle, wie beispielsweise \citeJournalAndArticleTitle?
Ich benötige aber keinen neuen bzw speziellen Zitierbefehl, sondern lediglich eine Korrekte Ausgabe mit den vorgefertigen \autocite \parencite \footcite befehlen.

Ich möchte, nachdem die Formatierung im Literaturverzeichnis einigermaßen passt – abgesehen, von der \iffieldundef{date} Problematik –, auch die Formatierung der Literaturangabe im Fließtext anpassen. Wie geht das?

Wenn das ebenfalls über \DeclareCiteCommand funktioniert brauche ich bitte ein kurzes Beispiel oder einen Link.

Gruß

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Wenn du einen existierenden \cite-Befehl ändern willst musst du dessen Definition suchen, (irgendwo in einem der cbx-Dateien oder in biblatex.def, und nachschauen, wie er definiert wird. Dann kannst du die Definition entweder mit \DeclareCiteCommand einfach überschreiben, oder du definierst einen der verwendeten bibmacros um.

Gast

Beitrag von Gast »

Hallo,

danke. Es wird jetzt richtig ausgegeben.
\renewbibmacro*{cite}{%
  \iffieldequalstr{entrytype}{legal}
  {\usebibmacro{cite:legal}}
  {\iffieldundef{shorthand}
	    {\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
	       {\usebibmacro{cite:label}%
	        \setunit{\addspace}}
	       {\printnames{labelname}%
	        \setunit{\nameyeardelim}}%
	     \usebibmacro{cite:labelyear+extrayear}}
	    {\usebibmacro{cite:shorthand}}
    }
}


\newbibmacro*{cite:legal}
	{\iffieldequalstr{type}{resolution}
		{\usebibmacro{cite:resolution}}
		{\usebibmacro{cite:slegal}}
	}

\newbibmacro*{cite:resolution}{%
	\printfield{journaltitle}%
	\printtext{/}%
	\printfield{number}%
}

\newbibmacro*{cite:slegal}{%
	\printfield{journaltitle}%
	\addspace%
	\printfield{number}%
}
Allerdings sieht mir das eher nach quick and dirty anstatt einer anständigen Lösung aus.

Ist der Code so annehmbar? Kann man die den labels zugeordneten Eingabefelder irgendwie verändern?

Und die andere frage ist immer noch offen: Wieso wird das Datum aus dem date Feld nicht ausgegeben?

Gruß

Antworten