BibLatex: DeclareFieldFormat bzw. DeclareNameFormat

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


rocketscience
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 51
Registriert: Mo 15. Nov 2010, 15:05

BibLatex: DeclareFieldFormat bzw. DeclareNameFormat

Beitrag von rocketscience »

Hallo BibLatex-User und Entwickler,

ich stehe an dem Feintuning meins Literaturverzeichnisses und habe zwei Probleme:

1. Um Interviews einzubinden nutze ich einen neuen Entry-Type, der jedoch als Misc von BibLatex übersetzt wird und zusätzlich das Feld "authortype" beinhaltet, um eine Funktion (bspw. Geschäftsführer) bei einem Intervieweintrag aufzunehmen. Hier bin ich mit dem Ergebnis (siehe Minimalbeispiel) zufrieden, einzig das fett gedruckte Feld stört sowohl in den Fußnoten als auch im Verzeichnis.

Ich habe hier versucht mit dem Befehl
\DeclareFieldFormat{authortype}{}
etwas zu erreichen, leider ohne Erfolg und ohne Fehlermeldung.

2. Das Format der Namen im Literaturverzeichnis ist im Augenblick wie folgt: Name, Vorname, Vorname Name und Vorname Name... Ich würde das gern entsprechend DIN 1505 ändern und zwar in Name, Vorname, Name, Vorname, Name, Vorname...

Ich nutze in meinen Fußnoten den Befehl
 \DeclareNameFormat{default}{%
\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}% 
\usebibmacro{name:andothers}} 
, der auch Wirkung zeigt (er wird über einen eigenen Fußnotenstil "myverbose-ibid" eingebunden). Nun möchte ich das selbe, jedoch ohne gekürzten Vornamen auch im Literaturverzeichnis realisieren, habe entsprechend versuch das ganze im authoryear-Stil unterzubringen, leider ohne Erfolg.

Minimalbeispiel:
\begin{filecontents*}{MeineBib.bib}
@interview{Beispiel2010a,
	Author = {Max Muster},
	Title = {Interview zum Muster},
	Authortype = {Test Authortype},
	Address = {Musterstadt},
	Date = {2011-01-21}}
	
@ARTICLE{Beispiel2010b,
	author = {Max Muster and Max Mustermann},
	title = {goLaTeX Wiki-Beispiel},
	journal = {LaTeX Journal},
	year = {2010},
	pages = {1-3},
	timestamp = {2010.03.21},
	url = {http://www.golatex.de/wiki/index.php?title=Minimalbeispiel}}

@ARTICLE{Beispiel2010c,
	author = {Max Mustermann},
	title = {goLaTeX Wiki-Beispiel},
	journal = {LaTeX Journal},
	year = {2010},
	pages = {1-3},
	timestamp = {2010.03.21},
	url = {http://www.golatex.de/wiki/index.php?title=Minimalbeispiel}}
\end{filecontents*}

%% Dokumentenklasse
\documentclass[							% Standardpaket KOMA-Klasse Report
        fontsize=12pt,  					% Schriftgröße
        DIV=14,
	headinclude=true,   					% der Teil des Satzspiegels wird
	footinclude=false,
        paper=a4,						% Papierformat
        oneside,						% einseitiges Dokument
        parskip=full,						% Abstand zwischen Absätzen
        headings=normal,					% Größe der Überschriften verkleinern
	toc=nobib,
        final							% Status des Dokuments (final/draft)
]{scrreprt}

%%Pakete
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{setspace}
\usepackage[ngerman]{babel}					% Sprachpaket Babel (Deutsch)
\usepackage{graphicx}						% Grafiken
\usepackage[german=quotes]{csquotes}				% Anfuehrungszeichen
\usepackage[tocindentauto,tocflat]{tocstyle}			% Design des Inhaltsverzeichnisses
\usepackage{blindtext}

\usepackage[						        % Standardpaket fuer Kopf-und Fusszeilen
        headsepline,         					% Trennlinie unter Kopf-und Fusszeile
        plainheadsepline,	 				% auch auf Plain-Seiten
        ilines               					% Trennlinie linksbündig ausrichten
]{scrpage2}

\usepackage[							% BibLatex 
	citestyle=verbose-ibid, 
	bibstyle=authoryear, 
	labelyear=true,
	hyperref=true,
	abbreviate=true,
	isbn=false,
	url=false,
	doi=false,
	dashed=false,
	ibidtracker=true, 
	pagetracker=true,
	maxnames=2,
]{biblatex}
\bibliography{MeineBib}

\defbibheading{bibliography}{% 					% Ueberschrift Lieraturverzeichnis
\chapter*{Literaturverzeichnis}}

%%%%%%%%%%%%%%%%%%%% ENDE FORMATIERUNG %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\pagenumbering{Roman}
\usetocstyle{classic}						% Klassische Verzeichnisse
\tableofcontents						% Inhaltverzeichnis

\chapter{Kapitel 1}
\blindtext\footnote{\cite[Vgl.][]{Beispiel2010a}}

\blindtext\footnote{\cites[Vgl.][]{Beispiel2010c}[3]{Beispiel2010b}}
\begin{figure}[ht]
\centering
\begin{tabular}{@{}p{6cm}@{}} 
\rule{6cm}{4cm}\\
\footnotesize\textbf{Quelle:} \citeauthor[][3]{Beispiel2010a}
\end{tabular}
\caption{Bildunterschrift in Anlehung an \citeauthor{Beispiel2010a}}
\end{figure}

\printbibliography
\end{document}
Ich bedanke mich schon jetzt für Eure Unterstützung!

Grüße

rocketscience
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 51
Registriert: Mo 15. Nov 2010, 15:05

\newbibmacro{authorstrg} aus biblatex.def

Beitrag von rocketscience »

Hallo Zusammen,

ich habe bzgl. des Problems mit dem fett-gedruckten Authortype folgendes in der "biblatex.def" gefunden (Z.1540)
\newbibmacro*{authorstrg}{%
  \iffieldundef{authortype}
    {}
    {\ifboolexpr{
       test {\ifnumgreater{\value{author}}{1}}
       or
       test {\ifandothers{author}}
     }
       {\bibstring{\thefield{authortype}s}}
       {\bibstring{\thefield{authortype}}}}}
Dieses Macro wird vom Macro "author" aufgerufen. Trotz Anweisung von
\DeclareFieldFormat{authortype}{#1}
in der "biblatex.def" passiert in dem angegebenen Minimalbeispiel nichts :-(

Ich würde mich sehr über Hilfe freuen!

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

Beitrag von domwass »

Du müsstest eigentlich eine Warnung bekommen:
Package biblatex Warning: Bibliography string 'Test Authortype' undefined
(biblatex) at entry 'Beispiel2010a' on input line 87.
Das ist auch der Grund, warum das Feld fett ausgegeben wird (als Hinweis
darauf, dass etwas nicht stimmt). authortype erwartet einen vordefinierten
Bibliography String wie »editor«, »compiler« oder ähnliches, die in der lbx-
Datei definiert sein müssen. Du kannst natürlich eigene Bibliography Strings
definieren (mit \NewBibliographyString und \DefineBibliographyStrings).

Gruß,
Dominik.-

rocketscience
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 51
Registriert: Mo 15. Nov 2010, 15:05

Beitrag von rocketscience »

Hallo Dominik,

danke für den Tipp, ich habe folgendes in meine modifizierte verbode-ibid eigentragen (bzw. hinzugefügt)
\NewBibliographyString{authortype}

\DefineBibliographyStrings{ngerman}{ 
	sequens   = {f}, 
	sequentes = {ff},
	andothers = {{et\,al\adddot}},				 
	editor    = {(Hrsg.)}, 
	editors   = {(Hrsg.)},
	authortype = {Funktion:},
}

Leider brachte das keinen Erfolg, ich bekomme aus irgendeinem Grund beim kompillieren auch nicht deine angegebene Fehlermeldung (Editor bei mir ist TextMate).

EDIT: Fehlermeldung taucht doch versteckt in der Log auf:
ackage biblatex Warning: Bibliography string 'Test Authortype' undefined
(biblatex) at entry 'Beispiel2010a' on input line 100.
Eine generelle Frage von mir an dieser Stelle, ist die myverbose-ibid.cbx überhaupt der richtige Ort oder ändern sich damit nur die Fußnoten (so hab ich das bisher verstanden)?

Grüße

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

Beitrag von domwass »

Schwebt dir so etwas vor?
\documentclass{scrreprt} 
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib} 
@interview{Beispiel2010a, 
   Author = {Max Muster}, 
   Title = {Interview zum Muster}, 
   Authortype = {interviewer}, 
   Address = {Musterstadt}, 
   Date = {2011-01-21}} 
\end{filecontents*} 

\usepackage[ansinew]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage[ngerman]{babel}
\usepackage[german=quotes]{csquotes}
\usepackage[
   citestyle=verbose-ibid, 
   bibstyle=authoryear, 
   labelyear=true, 
   hyperref=true, 
   abbreviate=true, 
   isbn=false, 
   url=false, 
   doi=false, 
   dashed=false, 
   ibidtracker=true, 
   pagetracker=true, 
   maxnames=2, 
]{biblatex} 
\bibliography{\jobname} 

\renewbibmacro*{authorstrg}{% 
  \iffieldundef{authortype} 
    {} 
    {\ifboolexpr{ 
       test {\ifnumgreater{\value{author}}{1}} 
       or 
       test {\ifandothers{author}} 
     } 
       {\printtext{Funktion:\addspace}\bibstring{\thefield{authortype}s}}
       {\printtext{Funktion:\addspace}\bibstring{\thefield{authortype}}}}}
      
\NewBibliographyString{interviewer}
\NewBibliographyString{interviewers}
\DefineBibliographyStrings{ngerman}{ 
  interviewer = {Interviewer}, 
  interviewers = {Interviewer}, 
}

\begin{document} 
\footnote{\cite[Vgl.][]{Beispiel2010a}}
\printbibliography 
\end{document}
Gruß,
Dominik.-

rocketscience
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 51
Registriert: Mo 15. Nov 2010, 15:05

Beitrag von rocketscience »

Das sieht schon gut aus, mein Vorhaben ist folgendes:

Ich möchte ein Verzeichnis meiner Interviewpartner als Unterverzeichnis im Quellenverzeichnis haben.

Nun habe ich mir gedacht, einfach in meiner Literaturdatenbank einen neuen Entry Type zu definieren, der interview heißt und dort folgende Parameter zu vergeben:
Author = {Name des Interviewpartners},
Title = {Titel des Interviews},
Authortype = {Funktion des Interviepartners (bspw. Geschäftsführer)},
Address = {Ort des Interviews},
Date = {Datum des Interviews}}
Auf das Feld "authortype" bin ich durch die BibLatex Doku gekommen, passte ganz gut, um folgende Struktur für die Einträge im Verzeichnis zu generieren:

Name, Vorname; Funktion des Interviewpartners; Titel des Interviews; Datum des Interviews; Ort des Interviews

Nun habe ich bspw. Funktionen der Interviewpartner, die nicht immer gleich sind (Sales Manager Amerika, Sales Manager Afrika, etc.)

Wenn ich deine Lösung richtig verstehe, dann muss ich über den Code
\NewBibliographyString{interviewer} 
\NewBibliographyString{interviewers} 
\DefineBibliographyStrings{ngerman}{ 
  interviewer = {Interviewer}, 
  interviewers = {Interviewer}, 
} 
pro Funktion der Interviewpartner neue Strings definieren.

Ich hatte mir gedacht, dass ich mit "authortyp" in meiner Literaturdatenbank beliebige Funktionen definieren kann und diese dann einfach hinter dem Name ausgegeben werden.

Bin ich mit meinem Vorhaben von Anfang an einen falschen Weg gegangen, oder sollte ich für interview evt. einen eigenen Entry-Typ definieren, damit BibLatex diesen nicht als "misc" interpretiert?! Ich hab allerding noch keine eigenen Typen definiert, bin daher etwas unbeholfen an dieser Stelle.

Grüße aus HH

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

Beitrag von domwass »

Ruffy2k hat geschrieben:Wenn ich deine Lösung richtig verstehe, dann muss ich über den Code
\NewBibliographyString{interviewer} 
\NewBibliographyString{interviewers} 
\DefineBibliographyStrings{ngerman}{ 
  interviewer = {Interviewer}, 
  interviewers = {Interviewer}, 
} 
pro Funktion der Interviewpartner neue Strings definieren.
Ja, z.B. salesmanageram, salesmanageraf usw. Um das zu vereinfachen,
kannst du dir natürlich einen Befehl \SalesManager erstellen und dann mit
\NewBibliographyString{salesmanageram} 
\NewBibliographyString{salesmanageraf} 
\DefineBibliographyStrings{ngerman}{ 
  salesmanageram = {\SalesManager{} America}, 
  salesmanageraf = {\SalesManager{} Africa}, 
} 
entsprechend einstellen.
Ich hatte mir gedacht, dass ich mit "authortyp" in meiner Literaturdatenbank beliebige Funktionen definieren kann und diese dann einfach hinter dem Name ausgegeben werden.
Wie gesagt, das, was im Feld »authortype« angegeben ist, muss ein
definierter bibliography string sein.
Bin ich mit meinem Vorhaben von Anfang an einen falschen Weg gegangen, oder sollte ich für interview evt. einen eigenen Entry-Typ definieren, damit BibLatex diesen nicht als "misc" interpretiert?! Ich hab allerding noch keine eigenen Typen definiert, bin daher etwas unbeholfen an dieser Stelle.
Man kann nicht einfach beliebige eigene Typen definieren, denn sie müssen
in der bst-Datei von biblatex vorhanden sein. Aus diesem Grund gibt es die
Typen @customa, @customb, … @customf, die man für solche Fälle
heranziehen kann.

Gruß,
Dominik.-

rocketscience
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 51
Registriert: Mo 15. Nov 2010, 15:05

Beitrag von rocketscience »

Hallo Dominik,

vielen Dank für deine Antwort.
Ich verstehe im Augenblick (noch) nicht den Vorteil eines definierten Befehls \SalesManager, der würde mir doch eigentlich "nur" einen vorher definierten Wert ausgeben:
\newcommand{\SalesManager}{Sales Manager}
oder verstehe ich deinen Vorschlag falsch?
Um meinem Vorhaben eine "Jobbezeichnung" hinter dem Namen in Klammern anzugeben näher zu kommen, weißt du, ob es ein anderes Feld in BibLatex gibt, welches hinter dem Namen stehen könnte und einfach nur den Inhalt ausgibt, wie bspw. das Feld "title" es tut?

Grüße

PL

Beitrag von PL »

Wie wäre es hiermit:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[style=verbose]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@customa{interview1,
  author     = {Schmidt, Heinz},
  title      = {Titel des Interviews},
  authortype = {director},
  location   = {Buxtehude},
  date       = {2010-05-21},
}
@customa{interview2,
  author     = {Doe, John},
  title      = {Titel des Interviews},
  authortype = {Sales Manager},
  location   = {Buxtehude},
  date       = {2010-05-22},
}
\end{filecontents*}
\bibliography{\jobname}

\DeclareBibliographyDriver{customa}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit\newblock
  \usebibmacro{location+date}%
  \newunit\newblock
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \usebibmacro{finentry}}

\renewbibmacro*{authorstrg}{%
  \iffieldundef{authortype}
    {}
    {\printtext{%
       \ifbibxstring{\thefield{authortype}}
	 {\ifboolexpr{
	    test {\ifnumgreater{\value{author}}{1}}
	    or
	    test {\ifandothers{author}}
	  }
	    {\bibstring{\thefield{authortype}s}}
	    {\bibstring{\thefield{authortype}}}}
	 {\thefield{authortype}}}}}

\NewBibliographyString{director,directors}
\DefineBibliographyStrings{ngerman}{
  director  = {Gesch\"aftsf\"uhrer},
  directors = {Gesch\"aftsf\"uhrer},
}

\begin{document}
\nocite{*}
\printbibheading[title={Quellen}]
\printbibliography[type=customa,heading=subbibliography,title={Interviews}]
\end{document}
Wichtig:

1. Ich habe den "authorstrg"-Makro so erweitert, dass die "bibliography strings" optional sind. Du kannst als "authortype" also entweder einen Schlüssel angeben (Bsp. interview1) oder normalen Text (Bsp. interview2).

2. Wenn du Biber statt BibTeX verwendest, kannst du auch neue Eintragstypen einführen, also z.B. "customa" durch "interview" ersetzen.

rocketscience
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 51
Registriert: Mo 15. Nov 2010, 15:05

Beitrag von rocketscience »

Hallo PL,

ich habe den Teil
\renewbibmacro*{authorstrg}{% 
  \iffieldundef{authortype} 
    {} 
    {\printtext{% 
       \ifbibxstring{\thefield{authortype}} 
    {\ifboolexpr{ 
       test {\ifnumgreater{\value{author}}{1}} 
       or 
       test {\ifandothers{author}} 
     } 
       {\bibstring{\thefield{authortype}s}} 
       {\bibstring{\thefield{authortype}}}} 
    {\thefield{authortype}}}}}
ausprobiert und es funktioniert tadellos. Ich werde mir bei Gelegenheit die Erweiterung mal anschauen, um das zu verstehen, was du erweitert hast.

Ebenso werde ich mir Biber mal ansehen, aber ich glaube mit BibLatex kann man auch Custom-Typen definieren?!

Vielen Dank und mfG

Antworten