von MoeWe » Mo 5. Jul 2021, 09:26
Zunächst zum Code. Den Block
\renewcommand*{\multinamedelim}{\addnbspace\komma\space}
\DeclareNameFormat{labelname}{
\ifnum\value{uniquename}<2
\ifuseprefix
{\usebibmacro{name:family-given}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefixi}
{\namepartsuffixi}}
\fi
\usebibmacro{name:andothers}}
%%% Zitationsstil - \footcite{•} %%%
\DeclareCiteCommand{\xfootcite}[\mkbibfootnote]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}
\setunit{\addnbspace}
\printnames{labelname}
\printfield[parens]{year}
\setunit{\addcolon\space}
\printfield[citetitle]{title}
\newunit}
{\addsemicolon\space}
{\usebibmacro{postnote}}
\renewcommand*{\labelnamepunct}{\addcomma\space}
%Italic weg
\DeclareFieldFormat[article, book]{title}{#1}
\DeclareFieldFormat{journaltitle}{#1}
kann man noch erheblich vereinfachen. Außerdem sind da ein paar Probleme drin.
- Den Befehl \komma gibt es nicht.
- Die Definition von labelname kann zu einem ungewollten Leerzeichen führen (das durch das % in \DeclareNameFormat{labelname}{% verhindert werden könnte). Ferner ist der Code so gebaut, dass er in bestimmten Situationen gar keine Namen ausgibt. Nämlich dann, wenn Du zwei Autor*innen mit demselben Nachnamen und demselben Vornamensinitial aber unterschiedlichen Vornamen hast (Anne Elk und Anna Elk zum Beispiel).
Ich würde
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[
backend=biber,
style=ext-authoryear,
giveninits=true,
uniquename=init,
autocite=footnote,
]{biblatex}
\renewcommand*{\newunitpunct}{\addcomma\space}
\DeclareNameAlias{sortname}{family-given}
\DeclareNameAlias{labelname}{sortname}
\DeclareDelimAlias[bib,biblist]{finalnamedelim}{multinamedelim}
\DeclareFieldFormat*{citetitle}{#1}
\DeclareFieldFormat*{title}{#1}
\DeclareFieldFormat{issuetitle}{#1}
\DeclareFieldFormat{maintitle}{#1}
\DeclareFieldFormat{booktitle}{#1}
\DeclareFieldFormat{journaltitle}{#1\isdot}
\renewbibmacro*{in:}{%
\setunit{\addspace}%
\bibncpstring{in}%
\printunit{\intitlepunct}}
\renewcommand*{\jourvoldelim}{\addcomma\space}
\DeclareFieldFormat[article,periodical]{volume}{\bibstring{jourvol}~#1}
\renewcommand*{\volnumdelim}{\addcomma\space}
\NewBibliographyString{journum}
\DefineBibliographyStrings{german}{
journum = {Heft},
}
\DeclareFieldFormat[article,periodical]{number}{\bibstring{journum}~#1}
\DeclareFieldFormat[article,periodical]{pages}{#1}
\renewcommand*{\finentrypunct}{}
% da wir mit Jahr UND Titel zitieren,
% können wir davaon ausgehen, dass wir
% keine Buchstaben nach den Jahren
% brauchen, um die Dinge eindeutig zu machen
\DeclareFieldInputHandler{extradate}{\def\NewValue{}}
\DeclareInnerCiteDelims{footcite}{\bibopenparen}{\bibcloseparen}
\newbibmacro*{cite:title}{%
\printtext[bibhyperref]{%
\printfield[citetitle]{labeltitle}}}
\renewbibmacro*{cite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\printdelim{nonameyeardelim}}}
{\printnames{labelname}%
\setunit{\printdelim{nameyeardelim}}}%
\usebibmacro{cite:labeldate+extradate}%
\setunit{\printdelim{nametitledelim}}%
\usebibmacro{cite:title}}
{\usebibmacro{cite:shorthand}}}
\begin{filecontents}[overwrite]{\jobname.bib}
@book{elke,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
@book{elka,
author = {Anna Elk},
title = {A Theory on Stegosauruses},
year = {1973},
publisher = {Monthy \& Co.},
location = {London},
}
@book{elkb,
author = {Anna Elk},
title = {A Theory on Stegosauruses},
year = {1973},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem\autocite{sigfridsson,elke,elka,knuth:ct:b,knuth:ct:c,worman,nussbaum,geer}
\printbibliography
\end{document}
vorschlagen.
----
Aber nun dazu, dass Du den Code nicht zum Laufen bekommst.
Wie genau kompilierst Du Deinen Code? Welchen Editor nutzt Du, welche Knöpfe drückst Du? Bist Du sicher, dass Du nach jeder Stiländerung und jeder Änderung der .bib-Datei den ganzen Zyklus LaTeX, Biber, LaTeX, LaTeX hast laufen lassen? (Nicht nach jeder Änderung muss man den vollen Zyklus durchlaufen. Aber wenn man sicher sein will, dass alles so ist, wie es sein soll, ist es eine gute Idee, den ganzen Zyklus laufen zu lassen.) Manche Editoren haben eine Heuristik, mit der sie selbst bestimmen, wann welches Programm läuft. Diese Heuristik liegt nicht immer goldrichtig. Mit latexmk habe ich hingegen durchweg positive Erfahrungen.
Wie genau äußert es sich, dass "es nicht funktioniert"? Kannst Du uns bitte die .blg-Datei (das ist die Log-Datei von Biber, es ist eine einfache Text-Datei, auch wenn Windows bisweilen sagt, es sei eine "Leistungsüberwachungsdatei") hier in Gänze als Text einfügen (die Datei sollte recht kurz sein). Was sagt LaTeX in der .log-Datei (die ist i.Allg. etwas länger, daher würde ich mich erst auf Warnung und Fehler konzentrieren).
Ich weiß nicht ganz, was Du in Schritt 1 und 3 mit einem neuen Literaturverzeichnis meinst. Meinst Du eine .bib-Datei?
Von der Beschreibung her hätte ich gesagt, dass es zwei wahrscheinliche Problemherde gibt.
- Deine .bib-Datei hat ein Problem. Das sollte man in der .blg-Datei herausfinden können. Wenn Biber mit der .bib-Datei nicht klar kommt und sich weigert, die Datei zu kompilieren, dann sollte das in der .blg-Datei erklärt sein. Die Frage wäre nur, warum das vorher nicht aufgefallen ist.
- Dein Editor (oder Du) lässt den Kompilierzyklus nicht immer richtig laufen. Das könnte man rausfinden, wenn man mal aus der Kommandozeile kompiliert und genau nachvollzieht, welches Programm wann läuft. https://texwelt.de/fragen/3461/wie-komp ... m-terminal
Zunächst zum Code. Den Block
```
\renewcommand*{\multinamedelim}{\addnbspace\komma\space}
\DeclareNameFormat{labelname}{
\ifnum\value{uniquename}<2
\ifuseprefix
{\usebibmacro{name:family-given}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefixi}
{\namepartsuffixi}}
\fi
\usebibmacro{name:andothers}}
%%% Zitationsstil - \footcite{•} %%%
\DeclareCiteCommand{\xfootcite}[\mkbibfootnote]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}
\setunit{\addnbspace}
\printnames{labelname}
\printfield[parens]{year}
\setunit{\addcolon\space}
\printfield[citetitle]{title}
\newunit}
{\addsemicolon\space}
{\usebibmacro{postnote}}
\renewcommand*{\labelnamepunct}{\addcomma\space}
%Italic weg
\DeclareFieldFormat[article, book]{title}{#1}
\DeclareFieldFormat{journaltitle}{#1}
```
kann man noch erheblich vereinfachen. Außerdem sind da ein paar Probleme drin.
* Den Befehl `\komma` gibt es nicht.
* Die Definition von `labelname` kann zu einem ungewollten Leerzeichen führen (das durch das `%` in `\DeclareNameFormat{labelname}{%` verhindert werden könnte). Ferner ist der Code so gebaut, dass er in bestimmten Situationen gar keine Namen ausgibt. Nämlich dann, wenn Du zwei Autor*innen mit demselben Nachnamen und demselben Vornamensinitial aber unterschiedlichen Vornamen hast (`Anne Elk` und `Anna Elk` zum Beispiel).
Ich würde
```
\documentclass[ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[
backend=biber,
style=ext-authoryear,
giveninits=true,
uniquename=init,
autocite=footnote,
]{biblatex}
\renewcommand*{\newunitpunct}{\addcomma\space}
\DeclareNameAlias{sortname}{family-given}
\DeclareNameAlias{labelname}{sortname}
\DeclareDelimAlias[bib,biblist]{finalnamedelim}{multinamedelim}
\DeclareFieldFormat*{citetitle}{#1}
\DeclareFieldFormat*{title}{#1}
\DeclareFieldFormat{issuetitle}{#1}
\DeclareFieldFormat{maintitle}{#1}
\DeclareFieldFormat{booktitle}{#1}
\DeclareFieldFormat{journaltitle}{#1\isdot}
\renewbibmacro*{in:}{%
\setunit{\addspace}%
\bibncpstring{in}%
\printunit{\intitlepunct}}
\renewcommand*{\jourvoldelim}{\addcomma\space}
\DeclareFieldFormat[article,periodical]{volume}{\bibstring{jourvol}~#1}
\renewcommand*{\volnumdelim}{\addcomma\space}
\NewBibliographyString{journum}
\DefineBibliographyStrings{german}{
journum = {Heft},
}
\DeclareFieldFormat[article,periodical]{number}{\bibstring{journum}~#1}
\DeclareFieldFormat[article,periodical]{pages}{#1}
\renewcommand*{\finentrypunct}{}
% da wir mit Jahr UND Titel zitieren,
% können wir davaon ausgehen, dass wir
% keine Buchstaben nach den Jahren
% brauchen, um die Dinge eindeutig zu machen
\DeclareFieldInputHandler{extradate}{\def\NewValue{}}
\DeclareInnerCiteDelims{footcite}{\bibopenparen}{\bibcloseparen}
\newbibmacro*{cite:title}{%
\printtext[bibhyperref]{%
\printfield[citetitle]{labeltitle}}}
\renewbibmacro*{cite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\printdelim{nonameyeardelim}}}
{\printnames{labelname}%
\setunit{\printdelim{nameyeardelim}}}%
\usebibmacro{cite:labeldate+extradate}%
\setunit{\printdelim{nametitledelim}}%
\usebibmacro{cite:title}}
{\usebibmacro{cite:shorthand}}}
\begin{filecontents}[overwrite]{\jobname.bib}
@book{elke,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
@book{elka,
author = {Anna Elk},
title = {A Theory on Stegosauruses},
year = {1973},
publisher = {Monthy \& Co.},
location = {London},
}
@book{elkb,
author = {Anna Elk},
title = {A Theory on Stegosauruses},
year = {1973},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Lorem\autocite{sigfridsson,elke,elka,knuth:ct:b,knuth:ct:c,worman,nussbaum,geer}
\printbibliography
\end{document}
```
vorschlagen.
----
Aber nun dazu, dass Du den Code nicht zum Laufen bekommst.
Wie genau kompilierst Du Deinen Code? Welchen Editor nutzt Du, welche Knöpfe drückst Du? Bist Du sicher, dass Du nach jeder Stiländerung und jeder Änderung der `.bib`-Datei den ganzen Zyklus LaTeX, Biber, LaTeX, LaTeX hast laufen lassen? (Nicht nach jeder Änderung muss man den vollen Zyklus durchlaufen. Aber wenn man sicher sein will, dass alles so ist, wie es sein soll, ist es eine gute Idee, den ganzen Zyklus laufen zu lassen.) Manche Editoren haben eine Heuristik, mit der sie selbst bestimmen, wann welches Programm läuft. Diese Heuristik liegt nicht immer goldrichtig. Mit `latexmk` habe ich hingegen durchweg positive Erfahrungen.
Wie genau äußert es sich, dass "es nicht funktioniert"? Kannst Du uns bitte die `.blg`-Datei (das ist die Log-Datei von Biber, es ist eine einfache Text-Datei, auch wenn Windows bisweilen sagt, es sei eine "Leistungsüberwachungsdatei") hier in Gänze als Text einfügen (die Datei sollte recht kurz sein). Was sagt LaTeX in der `.log`-Datei (die ist i.Allg. etwas länger, daher würde ich mich erst auf Warnung und Fehler konzentrieren).
Ich weiß nicht ganz, was Du in Schritt 1 und 3 mit einem neuen Literaturverzeichnis meinst. Meinst Du eine `.bib`-Datei?
Von der Beschreibung her hätte ich gesagt, dass es zwei wahrscheinliche Problemherde gibt.
* Deine `.bib`-Datei hat ein Problem. Das sollte man in der `.blg`-Datei herausfinden können. Wenn Biber mit der `.bib`-Datei nicht klar kommt und sich weigert, die Datei zu kompilieren, dann sollte das in der `.blg`-Datei erklärt sein. Die Frage wäre nur, warum das vorher nicht aufgefallen ist.
* Dein Editor (oder Du) lässt den Kompilierzyklus nicht immer richtig laufen. Das könnte man rausfinden, wenn man mal aus der Kommandozeile kompiliert und genau nachvollzieht, welches Programm wann läuft. https://texwelt.de/fragen/3461/wie-kompiliere-ich-in-der-eingabeaufforderung-im-terminal