Versuch es mal mit dem Befehl \DeclareDatamodelFields
(WICHTIG: Funktioniert nur mit biber
!). In der biblatex Anleitung steht dazu auf Seite 149 (v2.7a 14/07/2013):
The default data model is defined in
the core biblatex file blx-dm.def
[…]. […] In practice, changing the data
model means that you can define the
entrytypes and fields for your
datasources and validate your data
against the data model. Naturally,
this is not much use unless your style
supports any new entrytypes or fields
and it raises issues of portability
between styles […].
Um es kurz zu fassen, soweit ich es verstanden habe, kannst du damit einfach neue Felder und Eingangs-Typen definieren.
Der Rest ist – mehr oder weniger – einfach:
- Die Datei
blx-dm.def
suchen,
- herausfinden durch welchen Befehl z.B.
author
definiert wurde (da ich annehme, dass author
und maintainer
beide ähnliche Typen sind),
- dieselben Einstellungen nehmen mit denen auch
author
definiert wurde, und damit in der eigenen benutzerdefinieten Datei biblatex-dm.cfg
ein neues Feld (z.B. maintainer
) definieren.
Hier ist das Beispiel:
\documentclass{article}
\usepackage{filecontents}
\usepackage[backend=biber,style=alphabetic]{biblatex}
\usepackage[ngerman]{babel}
\begin{filecontents*}{\jobname.bib}
@package{chngcntr,
title = {chngcntr} ,
subtitle = {Changing counter properties} ,
author = {Peter Wilson} ,
maintainer = {Will Robertson} ,
date = {2009-09-02} ,
version = {1.0a} ,
url = {http://mirror.ctan.org/macros/latex/contrib/chngcntr}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\DeclareBibliographyDriver{package}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
\usebibmacro{author}%
\setunit{\addcomma\addspace}%
\usebibmacro{maintainer}%
\setunit{\labelnamepunct}\newblock
\usebibmacro{maintitle+title}%
\printfield{version}%
\setunit{\addcomma\addspace}%
\usebibmacro{date}%
\newunit\newblock
\usebibmacro{url+urldate}%
\newunit\newblock
\usebibmacro{finentry}%
}
\NewBibliographyString{maintainer}
\DefineBibliographyStrings{ngerman}{%
maintainer = {Die Person die gerade daran arbeitet}
}
\newbibmacro*{maintainer}{%
\printtext{%
\ifnameundef{maintainer}
{}
{\bibstring{maintainer}%
\setunit{\addcolon\addspace}%
\printnames{maintainer}}%
}}
\DeclareNameAlias{maintainer}{default}
\begin{filecontents*}{biblatex-dm.cfg}
\ProvidesFile{biblatex-dm.cfg}
\DeclareDatamodelFields[type=list, datatype=name]{maintainer}
\endinput
\end{filecontents*}
\newcommand*\packageformat{\sffamily}
\begin{document}
See~\cite{chngcntr}
\printbibliography
\end{document}
Noch einmal der Hinweis: Funktioniert nur mit biber
! Außerdem gehört \DeclareDatamodelFields
in die eigens-definierte Datei biblatex-dm.cfg
. Außerdem habe ich noch den bibstring maintainer
definiert, damit man Autor und Maintaier besser außeinanderhalten kann.
Zur Bonusfrage: Das Feld title
und subtitle
sind miteinander gekoppelt und werden durch den bibmacro-Befehl title
gesetzt. In biblatex.def
der Befehl title
folgendermaßen definiert:
\newbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase]{title}%
\setunit{\subtitlepunct}%
\printfield[titlecase]{subtitle}}%
\newunit}%
\printfield{titleaddon}}
Das bedeutet: Zum einem werden title
und subtitle
von außen durch \printtext[title]
formatiert. Wenn nun das Feld-Format „title“ als fett definiert wurde (durch \DeclareFieldFormat{title}{\textbf{#1}}
), werden sowohl title
als auch subtitle
automatisch fett.
Um nun zu verstehen, warum man subtitle
nicht allein verändern kann, ist es wichtig den Befehl \printfield[Format]{Feld}
zu verstehen.
Wenn nur das benötigte Argument angegeben wird (z.B. \printfield{Test}
) und kein optionales, so wird das Format
automatisch zum Inhalt des benötigten Arguments (\printfield{Test}
= \printfield[Test]{Test}
).
Hier kannst du einfach \DeclareFieldFormat{Test}{ \textbf{#1} }
schreiben und Test
wird Fett ausgegeben.
Wenn nun das optionale Argument angegeben wird, zählt dieses als Format. Wenn also \printfield[Versuch]{Test}
steht, kannst du \DeclareFieldFormat{Test}{ \textbf{#1} }
sooft ändern wie du willst, da das Feld ja durch „Versuch“ formatiert wird. Eine Formatänderung wäre hier durch \DeclareFieldFormat{Versuch}{ \textbf{#1} }
erreichbar.
Und so ist es auch hier: \printfield[titlecase]{subtitle}
bedeutet, dass das Feld subtitle
durch „titlecase“ formatiert wird. Du kannst also das Format „subtitle“ sooft verändern wie du willst, das Feld subtitle
wird ja durch das Format „titlecase“ formatiert. Willst du nun das subtitle
Feld formatieren, änderst du entweder die „titlecase“ Formatierung (was auch zu einer Formatänderung beim Feld title
führen würde, also unerwünscht ist) oder du löscht das [titlecase]
bei subtitle
:
\renewbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
and
test {\iffieldundef{subtitle}}
}
{}
{\printtext[title]{%
\printfield[titlecase]{title}%
\setunit{\subtitlepunct}%
\printfield{subtitle}}% selbe wie \printfield[subtitle]{subtitle}
\newunit}%
\printfield{titleaddon}}
Dadurch kannst du das subtitle
Feld durch \DeclareFieldFormat{subtitle}{ \emph{#1} }
formatieren (wobei du beachten musst, dass es ja noch zusätzlich mit „title“ formatiert wird; „title“= fett, „subtitle“= kursiv =>Titel subtitle )
PS. Da das Format „title“ sowohl title
als auch subtitle
formatiert, bedeutet das, dass du einfach \DeclareFieldFormat[package]{title}{\textsf{#1}}
schreiben kannst und beide Felder haben keine Serifen.