Bis Version 3.3 hatten `\DeclareNameFormat` und `\DeclareIndexNameFormat` folgende Syntax:
\DeclareNameFormat[<entrytype>,...]{<format>}{<code>}
Im `<code>`-Teil hatten dabei die Parameter 1 bis 8 folgende Bedeutung:
- `#1`: Nachnamen (volle Form)
- `#2`: Nachnamen (Initialen)
- `#3`: Vornamen (volle Form, eingeschlossen zweiter und weiterer Namen)
- `#4`: Vornamen (Initialen)
- `#5`: Namenspräfixe (von, van, de, …, volle Form)
- `#6`: Namenspräfixe (Initialen)
- `#7`: Namenssuffixe (der Ältere, junior, …, volle Form)
- `#8`: Namenssuffixe (Initialen)
Das hat sich mit Version 3.3 geändert. Nun kann in `<code>` nur noch ein Parameter verwendet werden, der werden. Das erklärt dann auch die Fehlermeldung `! Illegal parameter number`: Parameter zwei bis acht gibt es nicht mehr. Der Parameter soll an den Befehl `\nameparts{#1}` weitergereicht werden soll. werden. Dieser definiert eine Reihe von Hilfsbefehlen mit den entsprechenden Werten:
- `\namepartfamily`: Nachnamen (volle Form)
- `\namepartfamilyi`: Nachnamen (Initialen)
- `\namepartgiven`: Vornamen (volle Form)
- `\namepartgiveni`: Vornamen (Initialen)
- `\namepartprefix`: Namenspräfixe (volle Form)
- `\namepartprefixi`: Namenspräfixe (Initialen)
- `\namepartsuffix`: Namenssuffixe (volle Form)
- `\namepartsuffixi`: Namenssuffixe (Initialen)
Wenn ein bestimmter Namensteil nicht gegeben ist, ist das entsprechende Makro ohne Ersetzungstext definiert (es ist »leer«).
Diese Änderung hat aus Sicht der Entwickler den Vorteil, dass das Konzept nun einfach und beliebig erweitert werden kann, ohne die Beschränkung auf neun Parameter zu haben. Für Stil-Schreiber oder andere Anwender hat sie den Vorteil, dass man sich nicht mehr merken muss, welcher Parameter was bedeutet. Die Makronamen spiegeln das nun eindeutig wieder. Anderseits wird es nun etwas aufwendiger, auf leere Parameter zu testen: `\ifblank{#3#5}` kann man zum Beispiel nicht einfach durch `\ifblank{\namepartgiven\namepartprefix}` ersetzen – die Makros müssen erst expandiert werden.
----------
Das Format aus dem Beispiel müsste dann wohl so aussehen:
aussehen (ungetestet):
\DeclareNameFormat{last-first/first-last}{%
\nameparts{#1}%
\ifnumequal{\value{listcount}}{\value{listtotal}}%% listtotal ist die Anzahl der Autoren
{\iffirstinits
{%
\usebibmacro{name:first-last}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}%
}
{%
\usebibmacro{name:first-last}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}%
}
\ifboolexpr{
test {\ifcsblank{namepartgiven}} and
test {\ifcsblank{namepartprefix}}
}
{}
{\usebibmacro{name:revsdelim}}
}
{\iffirstinits
{%
\usebibmacro{name:last-first}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}%
}
{%
\usebibmacro{name:last-first}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}%
}%
}%
\usebibmacro{name:andothers}
}