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

Open in Online-Editor
! 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
Open in Online-Editor
\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, 09:55

Johannes's gravatar image

Johannes
7.2k132759
Akzeptiert: 68%

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

(10 Mär, 09: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, 15:33

Clemens's gravatar image

Clemens
19.0k112960

bearbeitet 15 Mär, 15: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, 04:11) Clemens
(15 Mär, 05:47) Clemens
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×127

Frage gestellt: 10 Mär, 09:55

Frage wurde angeschaut: 2,184 Mal

Zuletzt aktualisiert: 15 Mär, 15:02