Mit dem Umstieg auf biblatex 3.3 funktioniert meine Namensdefintion nicht mehr. Wie kann ich diese auf die neue Version updaten?

Öffne in Overleaf
! Illegal parameter number in definition of \blx@defformat@d.
<to be read again> 
                   4
l.6         {\usebibmacro{name:first-last}{#1}{#4
                                           }{#5}{#7}}
? x
Öffne in Overleaf
\documentclass{article}
\usepackage[style=authoryear,backend=biber]{biblatex}
\DeclareNameFormat{last-first/first-last}{%
    \ifnumequal{\value{listcount}}{\value{listtotal}}%% listtotal ist die Anzahl der Autoren
    {\iffirstinits
        {\usebibmacro{name:first-last}{#1}{#4}{#5}{#7}}
        {\usebibmacro{name:first-last}{#1}{#3}{#5}{#7}}
        \ifblank{#3#5}
        {}
        {\usebibmacro{name:revsdelim}}
    }
    {\iffirstinits
        {\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}}
        {\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}}%
    }%
    \usebibmacro{name:andothers}
}
\begin{document}
\end{document}

gefragt 10 Mär '16, 15:55

Johannes's gravatar image

Johannes
7.3k294566
Akzeptiert-Rate: 43%

bearbeitet 05 Sep '17, 08:29

saputello's gravatar image

saputello
11.1k174365

Die Frage ist zum Archivieren gedacht, kein Support benötigt. Antworten sind jedoch sehr willkommen! Evtl. antworte ich auch selbst.

(10 Mär '16, 15:56) Johannes

Bis Version 3.3 hatten \DeclareNameFormat und \DeclareIndexNameFormat folgende Syntax:

Open in Online-Editor
\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. 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. 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 (ungetestet):

Open in Online-Editor
\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}
}
Permanenter link

beantwortet 14 Mär '16, 20:33

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 15 Mär '16, 20:02

1

Joseph Wright hat dazu einen Blogartikel geschrieben: http://www.texdev.net/2016/03/13/biblatex-a-new-syntax-for-declarenameformat/

(15 Mär '16, 09:11) cgnieder
(15 Mär '16, 10:47) cgnieder
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×223
×117
×8
×2

gestellte Frage: 10 Mär '16, 15:55

Frage wurde gesehen: 14,967 Mal

zuletzt geändert: 15 Mär '16, 20:02