Seite 1 von 2

BibLatex: DeclareFieldFormat bzw. DeclareNameFormat

Verfasst: Di 1. Feb 2011, 17:13
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

\newbibmacro{authorstrg} aus biblatex.def

Verfasst: Mi 2. Feb 2011, 11:24
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!

Verfasst: Mi 2. Feb 2011, 11:51
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.-

Verfasst: Mi 2. Feb 2011, 12:11
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

Verfasst: Mi 2. Feb 2011, 15:44
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.-

Verfasst: Mi 2. Feb 2011, 16:02
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

Verfasst: Do 3. Feb 2011, 09:11
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.-

Verfasst: Do 3. Feb 2011, 09:37
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

Verfasst: Fr 4. Feb 2011, 14:06
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.

Verfasst: Fr 4. Feb 2011, 15:25
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