Duplikat von Namensformat mit biblatex 3.3


Nach der Aktualisierung von LaTex und Biber laufen meine LaTex-Datein nicht mehr korrekt durch. Die Ursache dafür ist, dass es eine neue Syntax für DeclareNameFormat gibt (http://www.texdev.net/2016/03/13/biblatex-a-new-syntax-for-declarenameformat/).

Bisher sah meine Syntaxdatei für den Zitationsstil wie folgt aus:

Öffne in Overleaf
\RequirePackage{filecontents}
\begin{filecontents*}
    @ONLINE{website,
        TITLE        = {Titel der Website},
        HOWPUBLISHED = {Website},
        URL          = {http://www.musterseite.de},
        URLDATE      = {2017-07-11},
    }

@book{a,
    title = {Bsp. Titel},
    date = {2012},
    author = {Mustermax, Hans},
    location = {Berlin},
    publisher = {Musterverlag},
    }

@article{b,
    title = {Musterarticle},
    pages = {{116--121}},
    number = {39},
    journaltitle = {Musterjurnal},
    author = {Musterautor, Hans and Peter, Lustig and Schulz, Mario and Maier, Marie},
    date = {2012},   
}

\end{filecontents*}

\documentclass [12pt,a4paper]{article}  
\usepackage{cmap}
\usepackage[utf8]{inputenc}             
\usepackage[ngerman]{babel}

%BIBLATEX
\usepackage[style=authoryear-icomp,backend=biber,url=false,isbn=false,maxnames=2,maxbibnames=8,minbibnames=8]{biblatex}

\DeclareFieldFormat{pages}{#1}

\DeclareFieldFormat*{title}{\textit{#1}}
\DeclareFieldFormat*{citetitle}{\textit{#1}}
\DeclareFieldFormat*{journaltitle}{\textit{#1}}
\DeclareFieldFormat*{booktitle}{\textit{#1}}

\DeclareBibliographyDriver{incollection}{
    \usebibmacro{bibindex}
    \usebibmacro{begentry}
    \usebibmacro{author/translator+others}
    \setunit{\labelnamepunct}\newblock
    \usebibmacro{title}
    \newunit
    \printlist{language}
    \newunit\newblock
    \usebibmacro{byauthor}
    \newunit\newblock
    \usebibmacro{in:}
    \usebibmacro{editor}
    \setunit{\addcolon\space}
    \usebibmacro{maintitle+booktitle}
    \newunit\newblock
    \printfield{edition}
    \newunit
    \iffieldundef{maintitle}
    {\printfield{volume}
        \printfield{part}}
    {}
    \newunit
    \printfield{volumes}
    \newunit\newblock
    \usebibmacro{series+number}
    \newunit\newblock
    \newunit\newblock
    \usebibmacro{chapter+pages}
    \newunit\newblock
    \usebibmacro{publisher+location+date}
    \newunit\newblock
    \newunit\newblock
    \usebibmacro{doi+eprint+url}
    \newunit\newblock
    \usebibmacro{addendum+pubstate}
    \setunit{\bibpagerefpunct}\newblock
    \usebibmacro{finentry}
}

\renewbibmacro*{editor}{
    \ifnameundef{editor}
    {}
    {\printnames{editor}
        \usebibmacro{editorstrg}
        \clearname{editor}}}
\renewbibmacro*{editorstrg}{
    \iffieldundef{editortype}
    {\ifboolexpr{
            test {\ifnumgreater{\value{editor}}{1}}
            or
            test {\ifandothers{editor}}
        }
        {\addspace\mkbibparens{\bibstring{editors}}}
        {\addspace\mkbibparens{\bibstring{editor}}}}
    {\ifboolexpr{
            test {\ifnumgreater{\value{editor}}{1}}
            or
            test {\ifandothers{editor}}
        }
        {\addspace\mkbibparens{\bibstring{\thefield{editortype}s}}}
        {\addspace\mkbibparens{\bibstring{\thefield{editortype}}}}}
}

\DeclareFieldFormat{pagetotal}{ {} }

\DeclareFieldFormat{volumes}{ {} }

\DeclareNameFormat{default}{
    \usebibmacro{name:last}{#1}{#3}{#5}{#7}
    \usebibmacro{name:andothers}
}
\DeclareNameFormat{labelname}{
    \usebibmacro{name:last}{#1}{#3}{#5}{#7}
    \usebibmacro{name:andothers}
}

\DeclareNameFormat{sortname}{
    \iffirstinits
    {\usebibmacro{name:last-first}{#1}{#4}{#5}{#7}}
    {\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}}
    \usebibmacro{name:andothers}
}

\let\oldmultinamedelim\multinamedelim
\let\oldfinalnamedelim\finalnamedelim
\renewcommand*{\multinamedelim}{,\space}
\renewcommand*{\finalnamedelim}{~\&\space}
\AtBeginBibliography{
    \renewcommand*{\multinamedelim}{\oldmultinamedelim}
    \renewcommand*{\finalnamedelim}{\oldfinalnamedelim}
}

\usepackage{xpatch}

\xpatchbibmacro{textcite}{
    {\usebibmacro{cite:label}
        \setunit{
            \global\booltrue{cbx:parens}
            \addspace\bibopenparen}
        \ifnumequal{\value{citecount}}{1}
        {\usebibmacro{prenote}}
        {}
        \ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
        {\usebibmacro{cite:ibid}}
        {\usebibmacro{cite:labelyear+extrayear}}}
}{
{\usebibmacro{cite:label}
    \setunit{
        \global\booltrue{cbx:parens}
        \addspace\bibopenparen}
    \ifnumequal{\value{citecount}}{1}
    {\usebibmacro{prenote}}
    {}
    \usebibmacro{cite:labelyear+extrayear}}
}{}{}

\xpatchbibmacro{textcite}{
    {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
        {\usebibmacro{cite:ibid}}
        {\usebibmacro{cite:labelyear+extrayear}}}
}{
{\usebibmacro{cite:labelyear+extrayear}}
}{}{}

%ENDE BIBLATEX

\begin{document}
Text. \cite{Website}. Ein weiteres Zitat \cite{a} oder auch \cite{b}.

\printbibliography
\end{document}

Wie müsste die Syntax für die neueren Biblatex-Versionen aussehen um den selben Output für Zitate und für das Literaturverzeichnis zu erhalten?

gefragt 04 Sep, 16:28

J_tex's gravatar image

J_tex
777
Akzeptiert: 50%

geschlossen 06 Sep, 04:22

saputello's gravatar image

saputello
20.1k33257

Könntest Du bitte ein Minimalbeispiel einfügen? Also ein möglichst kurzes, aber komplettes Dokument, von \documentclass{...} bis zu \end{document}, was das Problem zeigt. Das vereinfacht die Bearbeitung erheblich und ist meist eine Garantie für eine Lösung. \DeclareNameFormat kommt in Deinem Code übrigens gar nicht vor. Dennoch sei auf Namensformat mit biblatex 3.3 hingewiesen. Außerdem sei auf \mkbibname<namepart> in der biblatex-Anleitung hingewiesen. Diese Änderungen ziehen sich durch ganz biblatex.

(05 Sep, 02:25) saputello

Off-Topic: Es sei auch wieder einmal darauf hingewiesen, dass in der Themenliste zu einem Beitrag nur einzelne Wörter als Themen angegeben werden können. Jedes einzelne Wort stellt also für sich ein Thema dar. Aus „neue Syntax“ werden also die Themen „syntax“ und „neue“, was natürlich Unsinn ist. Daher bitte immer nur Wörter angeben, die einzeln für sich jeweils ein sinnvolles Thema ergeben!

(05 Sep, 02:28) saputello

Das ist keine Antwort auf Deine Frage. Bitte editiere die Frage selbst, um alle relevanten Informationen einzufügen! Bitte verzichte dabei auf alles, was nichts mit der Frage zu tun hat und für ein vollständiges Minimalbeispiel nicht benötigt wird, beispielsweise ausufernde hyperref- oder geometry-Einstellungen und alle anderen Pakete, die für das Problem unerheblich sind. Wobei ich dringend empfehle, die Antwort aus der im Kommentar zur Frage bereits angegebene verwandten Frage bereits anzuwenden und ggf. lediglich Probleme damit zu zeigen.

(05 Sep, 05:20) saputello

Was soll man davon halten, dass Dein Beispiel trotz ausdrücklichen Hinweises auf die VM-Anleitung nicht lauffähig ist? Bei der filecontents-Umgebung fehlt das obligatorische Argument und das Beispiel enthält auch kein \addbibresource, lädt also gar keine Literaturdatenbank. Was soll man davon halten, dass trotz entsprechenden Hinweises gar nicht versucht wurde, die Änderung des Namensformats anzuwenden? So wie es die Frage ist, ist sie min. ein Duplikat.

(06 Sep, 04:11) saputello

Die Frage wurde aus folgenden Grund geschlossen: "Duplikat einer anderen Frage" durch saputello 06 Sep, 04:22


Wie bereits im ersten Kommentar zur Frage angegeben, liegt das Problem am Namensformat mit biblatex 3.3. Leider musste ich dein Beispiel erst einmal grundsätzlich lauffähig machen:

  • bei \begin{filecontents*} fehlt das Argument mit dem Namen der zu erzeugenden Datei,
  • ein Literaturverzeichnis kann nur erstellt werden, wenn man per \addbibresource auch min. eine Literaturdatenbank verwendet,

um die dort angegebenen Änderungen dumm anwenden zu können:

Öffne in Overleaf
\begin{filecontents*}{\jobname.bib}
@ONLINE{website,
  TITLE        = {Titel der Website},
  HOWPUBLISHED = {Website},
  URL          = {http://www.musterseite.de},
  URLDATE      = {2017-07-11},
}

@book{a,
  title = {Bsp. Titel},
  date = {2012},
  author = {Mustermax, Hans},
  location = {Berlin},
  publisher = {Musterverlag},
}

@article{b,
  title = {Musterarticle},
  pages = {{116--121}},
  number = {39},
  journaltitle = {Musterjurnal},
  author = {Musterautor, Hans and Peter, Lustig and Schulz, Mario and Maier, Marie},
  date = {2012},   
}
\end{filecontents*}

\documentclass [12pt,a4paper]{article}  
\usepackage{cmap}
\usepackage[utf8]{inputenc}             
\usepackage[ngerman]{babel}

%BIBLATEX
\usepackage[style=authoryear-icomp,backend=biber,url=false,isbn=false,maxnames=2,maxbibnames=8,minbibnames=8]{biblatex}
\addbibresource{\jobname.bib}% Hinzugefügt

\DeclareFieldFormat{pages}{#1}

\DeclareFieldFormat*{title}{\textit{#1}}
\DeclareFieldFormat*{citetitle}{\textit{#1}}
\DeclareFieldFormat*{journaltitle}{\textit{#1}}
\DeclareFieldFormat*{booktitle}{\textit{#1}}

\DeclareBibliographyDriver{incollection}{
    \usebibmacro{bibindex}
    \usebibmacro{begentry}
    \usebibmacro{author/translator+others}
    \setunit{\labelnamepunct}\newblock
    \usebibmacro{title}
    \newunit
    \printlist{language}
    \newunit\newblock
    \usebibmacro{byauthor}
    \newunit\newblock
    \usebibmacro{in:}
    \usebibmacro{editor}
    \setunit{\addcolon\space}
    \usebibmacro{maintitle+booktitle}
    \newunit\newblock
    \printfield{edition}
    \newunit
    \iffieldundef{maintitle}
    {\printfield{volume}
        \printfield{part}}
    {}
    \newunit
    \printfield{volumes}
    \newunit\newblock
    \usebibmacro{series+number}
    \newunit\newblock
    \newunit\newblock
    \usebibmacro{chapter+pages}
    \newunit\newblock
    \usebibmacro{publisher+location+date}
    \newunit\newblock
    \newunit\newblock
    \usebibmacro{doi+eprint+url}
    \newunit\newblock
    \usebibmacro{addendum+pubstate}
    \setunit{\bibpagerefpunct}\newblock
    \usebibmacro{finentry}
}

\renewbibmacro*{editor}{
    \ifnameundef{editor}
    {}
    {\printnames{editor}
        \usebibmacro{editorstrg}
        \clearname{editor}}}
\renewbibmacro*{editorstrg}{
    \iffieldundef{editortype}
    {\ifboolexpr{
            test {\ifnumgreater{\value{editor}}{1}}
            or
            test {\ifandothers{editor}}
        }
        {\addspace\mkbibparens{\bibstring{editors}}}
        {\addspace\mkbibparens{\bibstring{editor}}}}
    {\ifboolexpr{
            test {\ifnumgreater{\value{editor}}{1}}
            or
            test {\ifandothers{editor}}
        }
        {\addspace\mkbibparens{\bibstring{\thefield{editortype}s}}}
        {\addspace\mkbibparens{\bibstring{\thefield{editortype}}}}}
}

\DeclareFieldFormat{pagetotal}{ {} }

\DeclareFieldFormat{volumes}{ {} }

\DeclareNameFormat{default}{
  % siehe http://texwelt.de/wissen/fragen/16629
  \nameparts{#1}%
  \usebibmacro{name:last}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}%
  \usebibmacro{name:andothers}%
}
\DeclareNameFormat{labelname}{
  % siehe http://texwelt.de/wissen/fragen/16629
  \nameparts{#1}%
  \usebibmacro{name:last}
    {\namepartfamily}
    {\namepartgiven}
    {\namepartprefix}
    {\namepartsuffix}%
  \usebibmacro{name:andothers}%
}

\DeclareNameFormat{sortname}{
  % siehe http://texwelt.de/wissen/fragen/16629
  \nameparts{#1}%
  \iffirstinits
  {%
    \usebibmacro{name:last}
      {\namepartfamily}
      {\namepartgiveni}
      {\namepartprefix}
      {\namepartsuffix}%
  }
  {%
    \usebibmacro{name:last}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  }%
  \usebibmacro{name:andothers}%
}

\let\oldmultinamedelim\multinamedelim
\let\oldfinalnamedelim\finalnamedelim
\renewcommand*{\multinamedelim}{,\space}
\renewcommand*{\finalnamedelim}{~\&\space}
\AtBeginBibliography{
    \renewcommand*{\multinamedelim}{\oldmultinamedelim}
    \renewcommand*{\finalnamedelim}{\oldfinalnamedelim}
}

\usepackage{xpatch}

\xpatchbibmacro{textcite}{
    {\usebibmacro{cite:label}
        \setunit{
            \global\booltrue{cbx:parens}
            \addspace\bibopenparen}
        \ifnumequal{\value{citecount}}{1}
        {\usebibmacro{prenote}}
        {}
        \ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
        {\usebibmacro{cite:ibid}}
        {\usebibmacro{cite:labelyear+extrayear}}}
}{
{\usebibmacro{cite:label}
    \setunit{
        \global\booltrue{cbx:parens}
        \addspace\bibopenparen}
    \ifnumequal{\value{citecount}}{1}
    {\usebibmacro{prenote}}
    {}
    \usebibmacro{cite:labelyear+extrayear}}
}{}{}

\xpatchbibmacro{textcite}{
    {\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
        {\usebibmacro{cite:ibid}}
        {\usebibmacro{cite:labelyear+extrayear}}}
}{
{\usebibmacro{cite:labelyear+extrayear}}
}{}{}

%ENDE BIBLATEX

\begin{document}
Text. \cite{Website}. Ein weiteres Zitat \cite{a} oder auch \cite{b}.

\printbibliography
\end{document}

Die notwendigen Änderungen waren also exakt so wie unter der oben verlinkten Frage erklärt. Es sei zusätzlich noch darauf hingewiesen, dass das korrekte Format für date eigentlich auch ein ISO-Format wäre. Nur die Jahreszahl ist eigentlich eher als year anzugeben auch wenn biblatex an der Stelle nicht ganz so streng ist.

Permanenter link

beantwortet 06 Sep, 04:18

Ijon%20Tichy's gravatar image

Ijon Tichy
5.8k1919

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

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

Zugeordnete Themen:

×155
×5
×3

Frage gestellt: 04 Sep, 16:28

Frage wurde angeschaut: 363 Mal

Zuletzt aktualisiert: 06 Sep, 04:24