Fußnote automatischer Punkt bei ebd. doppelt

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Fußnote automatischer Punkt bei ebd. doppelt

Re: Fußnote automatischer Punkt bei ebd. doppelt

von Texian » Mi 10. Mai 2023, 22:19

Vielen lieben Dank für eure Rückmeldungen und Ausführungen – für das aktuelle Projekt nehme ich einen eurer Vorschläge und werde in Zukunft dann einfach die Punkte manuell setzten; das sollte insgesamt wohl Stress ersparen, weil man ja sowieso nochmal die Fußnoten überprüft. Vielen Dank für eure Mühe :)

Re: Fußnote automatischer Punkt bei ebd. doppelt

von MoeWe » Di 9. Mai 2023, 13:45

In der Tat ist es auf lange Sicht nie ganz "ungefährlich", an internen Befehlen herumzudoktern. LaTeX bemüht sich zwar, stabil zu sein, aber wo gehobelt wird, fallen Späne: Wenn man neue Funktionen will, dann muss man eben auch hinnehmen, dass sich mal etwas ändert. In dem Fall hier ist es mir leider nicht gelungen, mit den vorhandenen KOMA-Script-Hooks die richtige Ausgabe zu erzeugen und auch die anderen involvierten Makros eigneten sich nicht gut zum Anpassen. Es blieb mir dann die Wahl, ob ich den internen Befehl \@footnotetext umdefiniere oder wie ursprünglich in deinem Code "von außen" \footnote umbastele. Beides ist meiner Meinung nach nicht optimal. Letztlich habe ich mich für die Variante entschieden, die mein ästhetisches Empfinden weniger verletzt. Auch wenn sie auf lange Sicht riskanter ist (und ich weiß, dass im Allgemeinen kürzerer Code präferiert wird).

Das Problem mit \AtBeginDocument{\let\normalsfcodes\frenchspacing} ist, dass es (wegen des French-Spacings) nun ungewollte Punkte hinzufügt, wenn die Fußnote mit einem nicht von biblatex erzeugten Satzzeichen endet.
\documentclass{scrartcl}
\usepackage[ngerman]{babel}

\usepackage{ifthen}

%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%
}

\AtBeginDocument{\let\normalsfcodes\frenchspacing}

\begin{document}
Lorem\footnote{Ein Text ohne Punkt}
ipsum\footnote{Ein Satz mit Punkt.}
dolor\footnote{Wie bitte?}
\end{document}
Bei \frenchspacing haben ja alle Satzzeichen Space-Factor 1000, sodass \the\spacefactor>\sfcode`, bei keinem Zeichen wahr ist. Nur von biblatex erzeugte Zeichen haben einen höheren Space-Factor. Daher geht es in diesem Kontext dann doch. Aber das ist dann eher Zufall, da der Test in einem anderen Space-Factor-Regime ausgeführt wird und gar nichts über biblatexs Einstellungen weiß.

Die ganze Sache ist also äußerst frickelig. Bei LaTeX gibt es so viele Möglichkeiten, wie andere Pakete und Befehle an Dingen herumspielen können, dass Du Dir bei so einer Automatik wie hier nie ganz sicher sein kannst, dass alles wie erwartet funktioniert. Ich bin bei meinem Code relativ zuversichtlich, dass es mit einem LaTeX-System auf heutigem Stand für Fußnoten, in denen der Text entweder manuell eingegeben oder von biblatex erzeugt wird, das Richtige tut. Ich möchte aber keinesfalls meine Hand dafür ins Feuer legen, dass der Code auch das tut, was Du gerne hättest, wenn Du den Text der Fußnote mit Befehlen eines anderen Pakets beendest. Es hindert diesen hypothetischen Befehl nämlich rein gar nichts daran, die Space-Factor-Werte so zu ändern, dass die Detektion nun nicht mehr wie erwartet funktioniert. Außerdem kann ich nicht garantieren, dass der Code in Zukunft dasselbe tut. Denn Definitionen können sich ändern (siehe Ulrikes Hinweis - und sie muss es wissen). So oder so musst Du also alle Deine Fußnoten manuell nachprüfen. Es ist dann zwar ein zusätzlicher Aufwand, bei jeder Prüfung den Punkt manuell hinzuzufügen, aber dennoch würde ich eher dazu raten, auf so eine Automatik zu verzichten, als sich dauerhaft darauf zu verlassen.

Re: Fußnote automatischer Punkt bei ebd. doppelt

von u_fischer » Mo 8. Mai 2023, 19:43

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

Re: Fußnote automatischer Punkt bei ebd. doppelt

von Texian » Mo 8. Mai 2023, 19:07

@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.

Re: Fußnote automatischer Punkt bei ebd. doppelt

von MoeWe » Mo 8. Mai 2023, 08:52

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}

Re: Fußnote automatischer Punkt bei ebd. doppelt

von Texian » So 7. Mai 2023, 20:25

@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 :)

Re: Fußnote automatischer Punkt bei ebd. doppelt

von u_fischer » So 7. Mai 2023, 19:40

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

Re: Fußnote automatischer Punkt bei ebd. doppelt

von Texian » So 7. Mai 2023, 15:11

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.

Re: Fußnote automatischer Punkt bei ebd. doppelt

von MoeWe » So 7. Mai 2023, 07:55

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}

Re: Fußnote automatischer Punkt bei ebd. doppelt

von Texian » Sa 6. Mai 2023, 22:25

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) 1844 mal betrachtet

Nach oben