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.
In der Tat ist es [i]auf lange Sicht[/i] 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 [tt]\@footnotetext[/tt] umdefiniere oder wie ursprünglich in deinem Code "von außen" [tt]\footnote[/tt] 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 [tt]\AtBeginDocument{\let\normalsfcodes\frenchspacing}[/tt] ist, dass es (wegen des French-Spacings) nun ungewollte Punkte hinzufügt, wenn die Fußnote mit einem nicht von [tt]biblatex[/tt] erzeugten Satzzeichen endet.
[code]\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}[/code]
Bei [tt]\frenchspacing[/tt] haben ja alle Satzzeichen Space-Factor 1000, sodass [tt]\the\spacefactor>\sfcode`,[/tt] bei keinem Zeichen wahr ist. Nur von [tt]biblatex[/tt] erzeugte Zeichen haben einen höheren Space-Factor. Daher geht es in [i]diesem[/i] 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 [tt]biblatex[/tt]s 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 [tt]biblatex[/tt] 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.