Sie sind hier

datatool und scrlttr2 2019/10/15 v3.27a.3268

Hallo Markus,

habe eben die neuste KOMA-Version per tlmgr update --all "bekommen" - Danke sehr!

Das \renewcaptionname-Problem ist behoben, aber sobald ich das datatool-package lade gibt's ne "TeX capacity exceeded ..." Ferhlermeldung. Ich weiß zwar nicht inwiefern das jüngste KOMA-Update dafür verantwortlich seien könnte, wollte es aber trotzdem melden.

Dieser Code hier funktioniert fehlerfrei, solange datatool nicht geladen wird. Hinweis: Ich nutze lualatex als Compiler.

Viele Grüße
MM

\documentclass[version=last
]{scrlttr2}
%]{scrartcl}
%\usepackage{scrletter}
\usepackage{datatool}
 
\usepackage[%
	main=ngerman,
	%english,
	british,
	american,
	french,
]{babel}
 
\renewcaptionname{ngerman}{\enclname}{Anlage}
\begin{document}
 
\begin{letter}{%
	Kunde
}%
 
\opening{Sehr geehrter Kunde,}
 
das gewünschte Angebot finden Sie in der Anlage.
 
\closing{Mit freundlichen Grüßen}
\encl{Angebot}
 
\end{letter}
\end{document}
forum: 
Bild von Markus Kohm

Das Problem tritt bereits mit:

\documentclass{article}
\usepackage{scrlfile}
\usepackage{datatool}
\begin{document}
\end{document}

bzw auch mit

\documentclass{article}
\usepackage{scrlfile}
\usepackage{fp}
\begin{document}
\end{document}

auf, also sobald fp nach scrlfile geladen wird. In dem Fall entsteht eine Rekursion innerhalb des \AtEndOfPackage Hooks von fp. Seltsamerweise passiert das bisher nur bei diesem Paket. Und seltsamerweise passiert das, obwohl das Paket gar kein \AtEndOfPackage verwendet.

Ursache ist der Workaround, den ich für ein Unsauberkeit im LaTeX-Kernel in scrlfile eingebaut habe.

Beseitigt man den Tippfehler im ersten MWE (datatool, ohne s), klappts dennoch nicht: "TeX capacity exceeded ..."

In der Hoffnung, dass es irgendwie hilfreich ist, füge ich unten das Log zu Deinem zweiten MWE ein:

\documentclass{article}
\usepackage{scrlfile}
\usepackage{fp}
\begin{document}
\end{document}
This is LuaTeX, Version 1.10.0 (TeX Live 2019/W32TeX)  (format=lualatex 2019.10.16)  16 OCT 2019 11:50
 restricted system commands enabled.
**brief.tex
(./brief.tex
LaTeX2e <2019-10-01> patch level 1
Lua module: luaotfload-main 2019-09-13 3.00 luaotfload entry point
Lua module: luaotfload-init 2019-09-13 3.00 luaotfload submodule / initializatio
n
Lua module: lualibs 2019-08-11 2.67 ConTeXt Lua standard libraries.
Lua module: lualibs-extended 2019-08-11 2.67 ConTeXt Lua libraries -- extended c
ollection.
Lua module: luaotfload-log 2019-09-13 3.00 luaotfload submodule / logging
Lua module: luaotfload-parsers 2019-09-13 3.00 luaotfload submodule / filelist
Lua module: luaotfload-configuration 2019-09-13 3.00 luaotfload submodule / conf
ig file reader
luaotfload | conf : Root cache directory is C:/Users/dora/.texlive2019/texmf-v
ar/luatex-cache/generic/names.
luaotfload | init : Loading fontloader “fontloader-2019-08-11.lua” from kpse
-resolved path “c:/texlive/2019/texmf-dist/tex/luatex/luaotfload/fontloader-20
19-08-11.lua”.
Lua-only attribute luaotfload@state = 2
Lua-only attribute luaotfload@noligature = 3
Lua-only attribute luaotfload@syllabe = 4
luaotfload | init : Context OpenType loader version “3.109”
Inserting `luaotfload.node_processor' at position 1 in `pre_linebreak_filter'.
Inserting `luaotfload.node_processor' at position 1 in `hpack_filter'.
Lua module: luaotfload-loaders 2019-09-13 3.00 luaotfload submodule / callback h
andling
Inserting `luaotfload.define_font' at position 1 in `define_font'.
Lua module: luaotfload-database 2019-09-13 3.00 luaotfload submodule / database
Lua module: luaotfload-unicode 2019-09-13 3.00 luaotfload submodule / Unicode he
lpers
Lua module: luaotfload-colors 2019-09-13 3.00 luaotfload submodule / color
Lua-only attribute luaotfload_color_attribute = 5
Lua module: luaotfload-resolvers 2019-09-13 3.00 luaotfload submodule / resolver
s
luaotfload | conf : Root cache directory is C:/Users/dora/.texlive2019/texmf-v
ar/luatex-cache/generic/names.
Lua module: luaotfload-features 2019-09-13 3.00 luaotfload submodule / features
Lua module: luaotfload-letterspace 2019-09-13 3.00 luaotfload submodule / color
Lua module: luaotfload-embolden 2019-09-13 3.00 luaotfload submodule / color
Lua module: luaotfload-notdef 2019-09-13 3.00 luaotfload submodule / color
Lua module: luaotfload-auxiliary 2019-09-13 3.00 luaotfload submodule / auxiliar
y functions
Inserting `luaotfload.aux.set_sscale_dimens' at position 1 in `luaotfload.patch_
font'.
Inserting `luaotfload.aux.patch_cambria_domh' at position 2 in `luaotfload.patch
_font'.
Inserting `luaotfload.aux.fixup_fontdata' at position 1 in `luaotfload.patch_fon
t_unsafe'.
Inserting `luaotfload.aux.set_capheight' at position 3 in `luaotfload.patch_font
'.
Inserting `luaotfload.aux.set_xheight' at position 4 in `luaotfload.patch_font'.
Lua module: luaotfload-multiscript 2019-09-13 3.00 luaotfload submodule / multis
cript
Inserting `luaotfload.rewrite_fontname' at position 5 in `luaotfload.patch_font'
.
luaotfload | main : initialization completed in 0.453 seconds
(c:/texlive/2019/texmf-dist/tex/latex/base/article.cls
Document Class: article 2019/08/27 v1.4j Standard LaTeX document class
(c:/texlive/2019/texmf-dist/tex/latex/base/size10.clo
File: size10.clo 2019/08/27 v1.4j Standard LaTeX file (size option)
luaotfload | db : Font names database loaded from C:/Users/dora/.texlive2019/t
exmf-var/luatex-cache/generic/names/luaotfload-names.luc)
\c@part=\count80
\c@section=\count81
\c@subsection=\count82
\c@subsubsection=\count83
\c@paragraph=\count84
\c@subparagraph=\count85
\c@figure=\count86
\c@table=\count87
\abovecaptionskip=\skip41
\belowcaptionskip=\skip42
\bibindent=\dimen102
) (c:/texlive/2019/texmf-dist/tex/latex/koma-script/scrlfile.sty
Package: scrlfile 2019/10/16 v3.27a.3269 KOMA-Script package (loading files)
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp.sty
Package: fp 1995/04/02
`Fixed Point Package', Version 0.8, April 2, 1995 (C) Michael Mehlich (c:/texli
ve/2019/texmf-dist/tex/latex/fp/defpattern.sty
Package: defpattern 1994/10/12
\actioncount=\count88
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-basic.sty
Package: fp-basic 1996/05/13
\FP@xs=\count89
\FP@xia=\count90
\FP@xib=\count91
\FP@xfa=\count92
\FP@xfb=\count93
\FP@rega=\count94
\FP@regb=\count95
\FP@regs=\count96
\FP@times=\count97
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-addons.sty
Package: fp-addons 1995/03/15
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-snap.sty
Package: fp-snap 1995/04/05
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-exp.sty
Package: fp-exp 1995/04/03
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-trigo.sty
Package: fp-trigo 1995/04/14
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-pas.sty
Package: fp-pas 1994/08/29
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-random.sty
Package: fp-random 1995/02/23
\FPseed=\count98
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-eqn.sty
Package: fp-eqn 1995/04/03
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-upn.sty
Package: fp-upn 1996/10/21
) (c:/texlive/2019/texmf-dist/tex/latex/fp/fp-eval.sty
Package: fp-eval 1995/04/03
))
! TeX capacity exceeded, sorry [input stack size=5000].
\fp.sty-h@@k ->\fp.sty-h@@k 
                            \let \@unprocessedoptions \relax 
l.4 \begin
        {document}
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.
Bild von Markus Kohm

Oh Mann, bin ich blöd. Bei den vielen Änderungen an meiner Testdatei habe ich irgendwann fp vor scrlfile geladen. Dass es damit funktioniert, ist nicht sonderlich verwunderlich. OK, ich werde den Workaround für das LaTeX-Problem deutlich aufbohren müssen. Mal sehen, was mir dazu einfällt.

Bild von Markus Kohm

Die sehr ausführliche Testdatei:

\NeedsTeXFormat{LaTeX2e}[2019-10-01]
\begin{filecontents}[force,noheader]{test-package.sty}
\ProvidesPackage{test-package}[2019-10-15 v0.1 test package]
\typeout{TRACEINFO: Begin loading test-package}
\AfterPackage{test-package}{\typeout{TRACEINFO: \string\AfterPackage\space code while loading the package before \string\AtEndOfPackage}}
\AfterPackage*{test-package}{\typeout{TRACEINFO: \string\AfterPackage* code while loading the package before \string\AtEndOfPackage}}
\AfterPackage+{test-package}{\typeout{TRACEINFO: \string\AfterPackage+ code while loading the package before \string\AtEndOfPackage}}
\AfterPackage!{test-package}{\typeout{TRACEINFO: \string\AfterPackage! code while loading the package before \string\AtEndOfPackage}}
\AfterAtEndOfPackage{test-package}{\typeout{TRACEINFO: \string\AfterAtEndOfPackage\space code while loading the package before \string\AtEndOfPackage}}
\AtEndOfPackage{\typeout{TRACEINFO: \string\AtEndOfPackage\space code}}
\AfterPackage{test-package}{\typeout{TRACEINFO: \string\AfterPackage\space code while loading the package after \string\AtEndOfPackage}}
\AfterPackage*{test-package}{\typeout{TRACEINFO: \string\AfterPackage* code while loading the package after \string\AtEndOfPackage}}
\AfterPackage+{test-package}{\typeout{TRACEINFO: \string\AfterPackage+ code while loading the package after \string\AtEndOfPackage}}
\AfterPackage!{test-package}{\typeout{TRACEINFO: \string\AfterPackage! code while loading the package after \string\AtEndOfPackage}}
\AfterAtEndOfPackage{test-package}{\typeout{TRACEINFO: \string\AfterAtEndOfPackage\space code while loading the package after \string\AtEndOfPackage}}
\typeout{TRACEINFO: End of loading test-package}
\endinput
\end{filecontents}
\documentclass{article}
\usepackage{scrlfile}
\usepackage{fp}% Only to test for errors
\typeout{TRACEINFO: Here it starts >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}%
\AfterPackage{test-package}{\typeout{TRACEINFO: \string\AfterPackage\space code before loading the package}}
\AfterPackage*{test-package}{\typeout{TRACEINFO: \string\AfterPackage* code before loading the package}}
\AfterPackage+{test-package}{\typeout{TRACEINFO: \string\AfterPackage+ code before loading the package}}
\AfterPackage!{test-package}{\typeout{TRACEINFO: \string\AfterPackage! code before loading the package}}
\AfterAtEndOfPackage{test-package}{\typeout{TRACEINFO: \string\AfterAtEndOfPackage\space code before loading the package}}
\typeout{TRACEINFO: First loading of package}\usepackage{test-package}
\AfterPackage{test-package}{\typeout{TRACEINFO: \string\AfterPackage\space code after loading the package}}
\AfterPackage*{test-package}{\typeout{TRACEINFO: \string\AfterPackage* code after loading the package}}
\AfterPackage+{test-package}{\typeout{TRACEINFO: \string\AfterPackage+ code after loading the package}}
\AfterPackage!{test-package}{\typeout{TRACEINFO: \string\AfterPackage! code after loading the package}}
\AfterAtEndOfPackage{test-package}{\typeout{TRACEINFO: \string\AfterAtEndOfPackage\space code after loading the package}}
\typeout{TRACEINFO: Second loading package}\usepackage{test-package}
\AfterPackage{test-package}{\typeout{TRACEINFO: \string\AfterPackage\space code after second loading the package}}
\AfterPackage*{test-package}{\typeout{TRACEINFO: \string\AfterPackage* code after second loading the package}}
\AfterPackage+{test-package}{\typeout{TRACEINFO: \string\AfterPackage+ code after second loading the package}}
\AfterPackage!{test-package}{\typeout{TRACEINFO: \string\AfterPackage! code after second loading the package}}
\AfterAtEndOfPackage{test-package}{\typeout{TRACEINFO: \string\AfterAtEndOfPackage\space code after second loading the package}}
\typeout{TRACEINFO: Last loading of package}\usepackage{test-package}
\AfterPackage{test-package}{\typeout{TRACEINFO: \string\AfterPackage\space code after last loading the package}}
\AfterPackage*{test-package}{\typeout{TRACEINFO: \string\AfterPackage* code after last loading the package}}
\AfterPackage+{test-package}{\typeout{TRACEINFO: \string\AfterPackage+ code after last loading the package}}
\AfterPackage!{test-package}{\typeout{TRACEINFO: \string\AfterPackage! code after last loading the package}}
\AfterAtEndOfPackage{test-package}{\typeout{TRACEINFO: \string\AfterAtEndOfPackage\space code after last loading the package}}
\typeout{TRACEINFO: Here it ends <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}%
\begin{document}
OK
\end{document}

Läuft jetzt bei mir einwandfrei durch und ergibt IMO auch das erwartete Ergebnis (relevanter Ausschnitt aus der log-Datei:

TRACEINFO: Here it starts >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TRACEINFO: First loading of package
(./test-package.sty
TRACEINFO: Begin loading test-package
TRACEINFO: \AfterPackage* code while loading the package before \AtEndOfPackage
 
TRACEINFO: \AfterPackage* code while loading the package after \AtEndOfPackage
TRACEINFO: End of loading test-package
)
TRACEINFO: \AfterPackage code before loading the package
TRACEINFO: \AfterPackage* code before loading the package
TRACEINFO: \AfterPackage+ code before loading the package
TRACEINFO: \AfterPackage code while loading the package before \AtEndOfPackage
TRACEINFO: \AfterPackage+ code while loading the package before \AtEndOfPackage
 
TRACEINFO: \AfterPackage code while loading the package after \AtEndOfPackage
TRACEINFO: \AfterPackage+ code while loading the package after \AtEndOfPackage
TRACEINFO: \AtEndOfPackage code
TRACEINFO: \AfterPackage! code before loading the package
TRACEINFO: \AfterAtEndOfPackage code before loading the package
TRACEINFO: \AfterPackage! code while loading the package before \AtEndOfPackage
 
TRACEINFO: \AfterAtEndOfPackage code while loading the package before \AtEndOfPackage
TRACEINFO: \AfterPackage! code while loading the package after \AtEndOfPackage
TRACEINFO: \AfterAtEndOfPackage code while loading the package after \AtEndOfPackage
TRACEINFO: \AfterPackage* code after loading the package
TRACEINFO: \AfterPackage+ code after loading the package
TRACEINFO: \AfterPackage! code after loading the package
TRACEINFO: Second loading package
TRACEINFO: \AfterPackage* code after second loading the package
TRACEINFO: \AfterPackage+ code after second loading the package
TRACEINFO: \AfterPackage! code after second loading the package
TRACEINFO: Last loading of package
TRACEINFO: \AfterPackage* code after last loading the package
TRACEINFO: \AfterPackage+ code after last loading the package
TRACEINFO: \AfterPackage! code after last loading the package
TRACEINFO: Here it ends <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Wenn da jetzt noch immer ein Fehler drin sein sollte, werde ich den heute sicher nicht mehr beheben. Ich habe heute noch nichts gegessen und heute Abend noch einen Termin. Dann geht es eben morgen weiter.

Besten Dank!

Hallo,

meines Erachtens liegt das am verschachtelten Laden der einzelnen fp-Pakete untereinander. Ich habe das mal auf ein MWE zusammengefahren:

\NeedsTeXFormat{LaTeX2e}[2019-10-01]
\begin{filecontents}[force,noheader,nosearch]{test-base.sty}
\RequirePackage{test-sub}
\ProcessOptions
\endinput
\end{filecontents}
\begin{filecontents}[force,noheader,nosearch]{test-sub.sty}
\RequirePackage{test-base}
\endinput
\end{filecontents}
\documentclass{article}
\usepackage{scrlfile}
\usepackage{test-base}
\begin{document}
OK
\end{document}

In dem Beispiel lädt das Paket test-base.sty das Paket test-sub.sty, welches wiederum test-base.sty lädt. Das verschachtelte Laden führt dazu, dass test-base.sty-h@@k bereits in test-sub.sty zu \@undefined gesetzt wird, was dann beim Aufruf von \ProcessOptions zum besagten Fehler führt.

Bild von Markus Kohm

Es ist eben schwer, um eine seltsame Implementierung im LaTeX-Kern herum zu programmieren. Ich habe jetzt einen komplett anderen Ansatz für den Workaround gewählt. Damit wird nun kein interner Hook von LaTeX mehr benötigt. Dafür ist es etwas umständlicher. Das war vor allem notwendig, damit es (hoffentlich, denn derzeit noch ungetestet) weiterhin mit dem Paket filehook funktioniert, das scrlfile nachprogrammiert.

Bei der Gelegenheit habe ich aber auch gleich noch eine Latte überflüssiger Gruppen entfernt.

Bild von Markus Kohm

Danke übrigens für das schöne Beispiel. Ich habe das jetzt in leicht abgewandelter Form in in der Diskussion im LaTeX-Bugtracker dazu verwendet zu zeigen, dass das derzeitige Verhalten von LaTeX tatsächlich ein Bug ist und mein Wunsch nach einer Änderung nicht nur eine Bitte um eine Erweiterung ist. Das Problem kann bei Verschachtelungen, wie Du sie hier gezeigt hast, nämlich tatsächlich zur Vernichtung von \AtEndOfPackage-Code führen, so dass dieser niemals ausgeführt wird.

Ich bin jetzt gespannt, ob der vielleicht etwas zu vorzeitig als Enhancement geschlossene Bug-Report von Enhancement zu Bug hochgestuft wird. IMHO wäre hier sogar eine Behebung im Rahmen der Patchlevel – so es noch einmal einen geben sollte – angebracht, statt es nur für die Beachtung bei einer 2020er-Release vorzumerken.

Wenigstens sollte aber der nächsten KOMA-Script-Release (bzw. mit der aktuellen Prerelease) die Verwendung von \AfterPackage! innerhalb eines Pakets als Workaround für den LaTeX-Bug (ich nenne das jetzt einmal so, auch wenn es noch nicht anerkannt ist) funktionieren.

... für diesen kleinen Einblick hinter die Kulissen der Latex-Entwicklung. Deine Prognose ist eingetreten - es wurde zum Bug hochgestuft.

Bild von Markus Kohm

Hauptsache es wird beseitigt.

Wie das Ganze zeigt, ist es aber durchaus sinnvoll Bugs zu melden. Bei genauerer Betrachten können sie tiefer liegen und größere Auswirkungen haben, als man denkt.

Bild von Markus Kohm

Laut Frank ist das Vorgehen von fp, dass fp Unterpakete lädt, die ihrerseits fp laden, außerhalb der ursprünglichen Spezifikation für \RequirePackage.

Ich hab da auch mal meinen Senf dazu gegeben. Prinzipiell könnte es ja auch sein, dass die beiden Pakete von unterschiedlichen Personen entwickelt werden und dennoch voneinander abhängig sind, sich also gegenseitig laden. Dann besteht das Problem ja weiterhin.

Comments for "datatool und scrlttr2 2019/10/15 v3.27a.3268" abonnieren