Fußnote automatischer Punkt bei ebd. doppelt Thema ist als GELÖST markiert

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


Texian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Sa 6. Mai 2023, 16:03

Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von Texian »

Guten Tag,

ich habe aktuell das Problem, dass in meiner Fußnote bei Literatur, die ich mit
\footnote{Vgl. \cite{LiteraturA}}
aufrufe – wenn diese zweimal nacheinander kommt und somit durch (ibidtracker=constrict) ein ebd. eingefügt wird – und ich keine Seitenzahl angebe, folgendes ausgegeben wird:
Beispielfoto.png
Beispielfoto.png (4.74 KiB) 1591 mal betrachtet
Das kommt wohl daher, dass ich folgenden Code zur automatischen Punktierung in meiner Präambel verwende:
\let\orgfootnote\footnote
\newcommand\myautodot{%
\ifthenelse{\the\spacefactor>\sfcode`,}{}{.}%
}
\renewcommand\footnote[2][\empty]{%
\ifx#1\empty%
\orgfootnote{\normalsfcodes#2\myautodot}%
\else%
\orgfootnote[#1]{\normalsfcodes#2\myautodot}%
\fi%
}
Leider habe ich keine Ahnung, wie ich hier den zweiten Punkt unterdrücken kann. Wenn ich händisch am Ende der Fußnote einen Punkt mache, dann wird dieser automatisch erkannt und kein zweiter ausgegeben; beim automatisch erstellten "ebd." funktioniert das aber scheinbar leider nicht.

Kann mir hier jemand helfen? Ich bin ziemlicher Laie und über jeden Tipp dankbar :)

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2528
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von Stefan Kottwitz »

Hallo Texian,

willkommen im Forum!

Der Code-Schnipsel lässt sich nicht testen, selbst wenn ich Code drumherum tippe (\documentclass etc.) heißt es \ifthenelse ist undefiniert.

Und vllt. ist irgendwas in der (ungenannten) Dokumentklasse oder (unbekanntem) Template oder in der Präambel (hier nicht zu sehen) definiert.

Wenn Du einen prüfbaren Code postest (Minimalbeispiel), lässt sich das sicher herausfinden.

Stefan

Texian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Sa 6. Mai 2023, 16:03

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von Texian »

Danke für die schnelle Rückmeldung und die Begrüßung! :)

Dann poste ich hiermit mal mein Minimalbeispiel:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[%
backend=biber,%
style=authortitle-dw,%
ibidtracker=constrict,%
idemtracker=constrict,%
idemfont=smallcaps,%
firstfull=true, % 
annotation=false]{biblatex} %

%Automatische Punktierung der Fußnoten
\let\orgfootnote\footnote
\newcommand\myautodot{%
\ifthenelse{\the\spacefactor>\sfcode`,}{}{.}%
}
\renewcommand\footnote[2][\empty]{%
\ifx#1\empty%
\orgfootnote{\normalsfcodes#2\myautodot}%
\else%
\orgfootnote[#1]{\normalsfcodes#2\myautodot}%
\fi%
}

\bibliography{biblatex-examples.bib}
\begin{document}
Das ist die erste Nennung der Literatur.\footnote{Vgl. \cite{sigfridsson}}
Beim zweiten Mal habe ich dann ein Problem..\footnote{Vgl. \cite{sigfridsson}}
Mit Seitenzahl passt es allerdings.\footnote{Vgl. \cite{sigfridsson}, 25}
\end{document}
Die Ausgabe ist dann folgende (mit dem falschen doppelten Punkt):
Bild 2.png
Bild 2.png (9.06 KiB) 1566 mal betrachtet
Zuletzt geändert von Texian am So 7. Mai 2023, 16:07, insgesamt 2-mal geändert.

MoeWe
Forum-Meister
Forum-Meister
Beiträge: 802
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von MoeWe »

Es ist natürlich aus der Ferne immer etwas schwierig zu beurteilen, was sonst noch so in Deinem Dokument los ist, zumindest in Deinem Beispiel wäre es aber wesentlich eleganter, von \footnote mit Hack und \cite einfach zu \autocite (oder \footcite, wenn man denn kein Fan von \autocite ist und darauf besteht, es expliziter - aber weniger anpassbar - zu machen) umzusteigen. Dann fügt biblatex nämlich den Punkt am Ende hinzu. Dabei wird auch auf den Unterschied zwischen Abkürzungs- und Satzendpunkt eingegangen, sodass die Ausgabe hier direkt wie gewünscht ist. Es ist dann nicht mehr nötig, \footnote aufwendig umzudefinieren.
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[
  backend=biber,
  style=authortitle-dw,
  ibidtracker=constrict,
  idemtracker=constrict,
  idemfont=smallcaps,
  firstfull=true,
  annotation=false,
]{biblatex}

\addbibresource{biblatex-examples.bib}

\begin{document}
Das ist die erste Nennung der Literatur.\autocite[Vgl.][]{sigfridsson}
Beim zweiten Mal habe ich dann ein Problem.\autocite[Vgl.][]{sigfridsson}
Mit Seitenzahl passt es allerdings.\autocite[Vgl.][25]{sigfridsson}
\end{document}

Texian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Sa 6. Mai 2023, 16:03

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von Texian »

Danke für die Antwort und den Vorschlag!

Allerdings brauch ich die Kombination aus \footnote und \cite, da ich öfters längere Passagen an Text und teilweise auch mehrere Literaturangaben in einer Fußnote habe. Und darüber hinaus sind es mittlerweile über 260 Fußnoten im Projekt, die ich ungern alle überarbeiten würde – also wenn jemand einen Tipp mit der vorhandenen Präambel wie im Minimalbeispiel hat, wäre ich sehr dankbar :wink:

Zur Not wird das PDF im Nachhinein überarbeitet mit einem weißen Kästchen über dem zweiten Punkt – mir wäre aber eine saubere Lösung in TeX natürlich lieber.

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von u_fischer »

Versuche es mit \AtBeginDocument{\let\normalsfcodes\frenchspacing}.

Texian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Sa 6. Mai 2023, 16:03

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von Texian »

@u_fischer das ist ja genial, vielen vielen Dank! :D

Kannst du mir erklären, wie(so) das funktioniert und was der Befehl genau macht? Ändert er nur etwas in den Fußnoten?

Auf den ersten Blick passt alles im Dokument und es hat sich sonst nichts verschoben bzw. verändert – aufgrund der Länge des Projekts konnte ich bisher aber nicht jede Seite einzeln prüfen. Vielen lieben Dank auf jeden Fall :)

MoeWe
Forum-Meister
Forum-Meister
Beiträge: 802
Registriert: Fr 30. Aug 2019, 15:35
Kontaktdaten:

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von MoeWe »

Mit \autocite sind natürlich auch Zitate mehrerer Werke möglich. Wenn bei allen eine Seitenzahl dazu muss, dann nimmst Du statt \autocite einfach \autocites. Allerdings sehe ich ein, dass es ab einem gewissen Punkt nicht mehr gut aussieht, längeren Text in die prenote zu schreiben. Ganze Absätze sind da eh nicht erlaubt und nur mit einem Trick machbar.
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[
  backend=biber,
  style=authortitle-dw,
  ibidtracker=constrict,
  idemtracker=constrict,
  idemfont=smallcaps,
  firstfull=true,
  annotation=false,
]{biblatex}

\addbibresource{biblatex-examples.bib}

\begin{document}
Das ist die erste Nennung der Literatur.\autocite[Vgl.][]{sigfridsson,worman}
Beim zweiten Mal habe ich dann ein Problem.\autocite[Auch ein längerer Text kann vor dem eigentlichen Zitat eingefügt werden. Allerdings sieht das im Code irgendwann nicht mehr so toll aus. Die \enquote{prenote} ist in der Tat eher für kurze Vorsätze gedacht.\endgraf
Ein Absatz geht nur mit Tricks. Vgl.][]{sigfridsson}
Mit Seitenzahl passt es allerdings.\autocite[Vgl.][25]{sigfridsson}
Mit Seitenzahl passt es allerdings.\autocites(Vgl.)()[25]{sigfridsson}[30]{worman}[17]{geer}
\end{document}
Ich würde dann zwar dazu raten, die Punkte am Ende doch selbst zu setzen, aber wenn es ein Automatismus sein muss, dann würde ich Deinen wie folgt auf den biblatex-Ansatz umstellen. Die Idee ist im Grunde ähnlich zu Deinem jetzigen Code: Es wird der "space factor", der vordergründig dazu da ist, nach ganzen Sätzen (bzw. Satzendpunkten) einen größeren Leerraum zu setzen als zwischen Wörtern (https://en.wikipedia.org/wiki/Sentence_spacing), dazu genutzt, Zeichensetzung generell zu detektieren und so zu erkennen, ob da am Ende ein Punkt steht oder nicht. (Mehr zur dieser Funktion findest Du z.B. in Kapitel 20 von TeX by Topic.) Dein Code erkannte Zeichensetzung aber mit anderen Space-factor-Werten als biblatex, sodass von biblatex gesetzte Punkte nicht richtig gesehen wurden. Statt \footnote ändern wir direkt \@footnotetext. Das hat den Vorteil, dass auch \footnotext wie gewünscht funktioniert. Ferner müssen wir biblatex erklären, dass wir seine Änderungen schon selbst vorgenommen haben.
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[
  backend=biber,
  style=authortitle-dw,
  ibidtracker=constrict,
  idemtracker=constrict,
  idemfont=smallcaps,
  firstfull=true,
  annotation=false,
]{biblatex}

\makeatletter
\long\def\@footnotetext#1{\insert\footins{%
    \reset@font\footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
    \def\@currentcounter{footnote}%
    \protected@edef\@currentlabel{%
       \csname p@footnote\endcsname\@thefnmark
    }%
    \color@begingroup
      \@makefntext{%
        \rule\z@\footnotesep\ignorespaces
        \blx@setsfcodes\bibsentence#1\blx@imc@addperiod
        \@finalstrut\strutbox}%
    \par
    \color@endgroup}}

\renewrobustcmd{\blxmkbibnote}[2]{%
  \begingroup
  \blx@blxinit
  \blx@postpunct@agroup
  \toggletrue{blx@footnote}%
  \csuse{bib#1notewrapper}{#2}%
  \endgroup}

\renewcommand{\bibfootnotewrapper}[1]{#1}
\renewcommand{\bibendnotewrapper}[1]{#1}
\makeatother

\begin{filecontents}{\jobname.bib}
@Book{LiteraturA,
  author  = {Vorname Nachname},
  title   = {Titel},
  year    = {2023},
  address = {Stadt},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
Das ist die erste Nennung der Literatur.\footnote{Vgl. \cite{LiteraturA}}
Beim zweiten Mal habe ich dann kein Problem.\footnote{Vgl. \cite{LiteraturA}}
Mit Seitenzahl passt es allerdings.\footnote{Vgl. \cite{LiteraturA}, 25}
Mit Seitenzahl passt es allerdings.\footnote{Vgl. \cite[25]{LiteraturA}}
Lorem\footnote{Ein Text ohne Punkt}
ipsum\footnote{Ein Satz mit Punkt.}
ipsum\footnote{Wie bitte?}

Das ist die erste Nennung der Literatur.\autocite[Vgl.][]{sigfridsson,worman}
Beim zweiten Mal habe ich dann kein Problem.\autocite[Vgl.][]{sigfridsson}
Mit Seitenzahl passt es allerdings.\autocite[Vgl.][25]{sigfridsson}
Mit Seitenzahl passt es allerdings.\autocites(Vgl.)()[25]{sigfridsson}[30]{worman}[17]{geer}
\end{document}

Texian
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Sa 6. Mai 2023, 16:03

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von Texian »

@MoeWe genial, auch dir vielen lieben Dank, vor allem auch für die ausführliche Erklärung! Funktioniert auf den ersten Blick super und wenn man sich damit sogar an Biblatex-Vorgaben hält, ist das ja perfekt :)

Was ich (einfach aus Interesse) trotzdem noch gerne wüsste, ist wie der erste Vorschlag mit \AtBeginDocument{\let\normalsfcodes\frenchspacing} funktioniert; aus deiner Antwort lese ich allerdings heraus, dass auf lange Sicht der lange Code zu bevorzugen ist? Das Ergebnis sieht für mich auf den ersten Blick nämlich gleich aus.

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Re: Fußnote automatischer Punkt bei ebd. doppelt

Beitrag von u_fischer »

Texian hat geschrieben:
Mo 8. Mai 2023, 19:07
@MoeWe genial, auch dir vielen Dank! Funktioniert auf den ersten Blick auch super und wenn man sich damit sogar an Biblatex-Vorgaben hält, ist das ja perfekt :)
Auf lange Sicht ist es keine gute Idee \@footnotetext umzudefinieren. Im Rahmen des tagged-PDF Projekts ändert sich der Befehl dramatisch, und so eine Definition geht dann entweder verloren, oder macht dann die LaTeX-Änderungen kaputt. Derzeit gibt es keine Alternative, aber es sollte nur als temporäre Lösung angesehen werden. (Wobei ich so einen Automatismus einfach nicht machen würde. Am Ende spart es nichts, man muss sowieso alle Fußnoten überprüfen.)
Was ich (einfach aus Interesse) trotzdem noch gerne wüsste, ist wie der erste Vorschlag mit \AtBeginDocument{\let\normalsfcodes\frenchspacing} funktioniert; aus deiner Antwort lese ich allerdings heraus, dass auf lange Sicht der lange Code zu bevorzugen ist?
Es repariert einfach einen Fehler: In einem deutschen Dokument sollte \normalsfcodes \frenchspacing ausführen, aber babel hat es bis jetzt versäumt das zu machen. https://github.com/latex3/babel/issues/240

Antworten