Hallo!
Wenn man eine der Dokumentklassen des KOMA-Skript-Paketes lädt
und dabei als Dokumentklassen-Option ein <Key>=<Value>-Paar
angibt, und dabei den <Value>-Teil in ein Paar kursiver
Klammern eingeschachtelt hat, beschwert sich LaTeX mittels der
Meldung:
LaTeX Error: Missing \begin{document}.
Das lässt sich an folgendem Minimalbeispiel - das .log-file dazu
habe ich unten angefügt - nachvollziehen, wo exemplarisch die
"20pt" in Klammern stehen:
% FOOBAR.TEX \documentclass[paper=A4,fontsize={20pt}]{scrartcl} \begin{document} Test \end{document}
Man könnte im Prinzip die Klammern einfach weglassen und die
Sache würde in diesem Fall problemlos durchlaufen.
Mich deucht, dass für das Auslösen der Fehlermeldung völlig egal
zu sein scheint, zu was für einem <Key> der in Klammern
eingeschachtelte <Value> gehört.
Die Fehlermeldung kommt auch dann, wenn man bspw eine eigene
Dokumentklasse schreibt, welche
\documentclass
-ArgumentBspw:
%%% % dummydocumentclass.cls %% \NeedsTeXFormat{LaTeX2e} \ProvidesClass{dummydocumentclass}[2010/11/03 v0.1beta test nonsense] \RequirePackage{kvoptions} \DeclareStringOption[StandardText]{Textoption} \ProcessKeyvalOptions{dummydocumentclass}\relax \LoadClassWithOptions{scrartcl} \endinput %% %% End of file `dummydocumentclass.cls'.
\documentclass[paper=A4, fontsize=20pt, Textoption={[X]AngekreuztUndFehlermeldung}% % Textoption=UnangekreuztKeineFehlermeldung% ]{dummydocumentclass} \begin{document} \csname dummydocumentclass@Textoption\endcsname \end{document}
Die Frage ist ob dieser Umstand, also die Fehlermeldung
"LaTeX Error: Missing \begin{document}.
", wann
immer eine Dokumentklassenoption einer der Dokumentklassen
des KOMA-Skript-Paketes einen in ein Paar kursiver Klammern
eingeschachtelten <Value> enthält, als "Bug" zu werten
ist?
Ulrich
Das versprochene .log-file:
This is pdfTeX, Version 3.1415926-1.40.11 (MiKTeX 2.9) (preloaded format=pdflatex 2010.10.30) 3 NOV 2010 16:50 entering extended mode **C:/Users/not*available/Desktop/FOOBAR.TEX ("C:/Users/not available/Desktop/FOOBAR.TEX" LaTeX2e <2009/09/24> Babel <v3.8l> and hyphenation patterns for english, afrikaans, ancientgreek, ar abic, armenian, assamese, basque, bengali, bokmal, bulgarian, catalan, coptic, croatian, czech, danish, dutch, esperanto, estonian, farsi, finnish, french, ga lician, german, german-x-2009-06-19, greek, gujarati, hindi, hungarian, iceland ic, indonesian, interlingua, irish, italian, kannada, kurmanji, lao, latin, lat vian, lithuanian, malayalam, marathi, mongolian, mongolianlmc, monogreek, ngerm an, ngerman-x-2009-06-19, nynorsk, oriya, panjabi, pinyin, polish, portuguese, romanian, russian, sanskrit, serbian, slovak, slovenian, spanish, swedish, swis sgerman, tamil, telugu, turkish, turkmen, ukenglish, ukrainian, uppersorbian, u senglishmax, welsh, loaded. ("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrartcl.cls" Document Class: scrartcl 2010/09/17 v3.07 KOMA-Script document class (article) ("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrkbase.sty" Package: scrkbase 2010/09/17 v3.07 KOMA-Script package (KOMA-Script-dependent b asics and keyval usage) ("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\koma-script\scrbase.sty" Package: scrbase 2010/09/17 v3.07 KOMA-Script package (KOMA-Script-independent basics and keyval usage) ("C:\Program Files (x86)\MiKTeX 2.9\tex\latex\graphics\keyval.sty" Package: keyval 1999/03/16 v1.13 key=value parser (DPC) \KV@toks@=\toks14 ) ! LaTeX Error: Missing \begin{document}. See the LaTeX manual or LaTeX Companion for explanation. Type H <return> for immediate help. ... l.248 \FamilyProcessOptions{KOMA} \relax ? x Here is how much of TeX's memory you used: 82 strings out of 494019 1854 string characters out of 3143929 49413 words of memory out of 3000000 3452 multiletter control sequences out of 15000+200000 3640 words of font info for 14 fonts, out of 3000000 for 9000 714 hyphenation exceptions out of 8191 35i,0n,23p,264b,20s stack positions out of 5000i,500n,10000p,200000b,50000s No pages of output. PDF statistics: 0 PDF objects out of 1000 (max. 8388607) 0 named destinations out of 1000 (max. 500000) 1 words of extra memory for PDF output out of 10000 (max. 10000000)
Das ist kein spezifischer Bug
Das ist kein spezifischer Bug in KOMA-Script, sondern ein Problem des LaTeX-Kerns. Dasselbe Problem tritt auf, wenn man eine Standardklasse verwendet:
Es würde auch nichts nützen, das Problem bei den KOMA-Script-Klassen zu beseitigen - vorausgesetzt, das wäre möglich. Denn bereits, wenn Du ein Standard-Paket lädst, geht das wieder in die Hose:
Hier wird der Fehler dann beim Laden von fontenc gemeldet, das die globalen Optionen ja ebenfalls erhält. Dass der Fehler von minimal nicht gemeldet wird, liegt schlicht daran, dass minimal keine Optionen kennt und keinerlei Code für Optionen enthält.
Aufgrund der mehr als seltsamen Art und Weise, wie der LaTeX-Kern Optionen verarbeitet, verschwindet das Problem übrigens, sobald Du ein Leerzeichen einfügst:
Das geht auch bei obigem Beispiel mit article oder minimal und fontenc.
Jetzt wird es auch für Deine Klasse spannend: Mit dem Leerzeichen passiert etwas, womit kein Mensch rechnet: Die geschweiften Klammern werden beseitigt:
Aufgrund der genannten Problematik glaube ich nicht, dass es etwas bringt, hier zu versuchen, KOMA-Script globale Optionen mit geschweiften Klammern beizubringen. Etwas anderes wäre es, wenn das bei
\KOMAoptions
ein Problem wäre. Das ist es aber nicht.Übrigens werfen andere key-value-Pakete dasselbe Problem auf:
Entschuldigung
Dass das nicht KOMA-Skript-spezifisch ist, ist mir nicht aufgefallen. Ausser den KOMA-Skript Klassen verwende ich nur die Standardklassen und bei letzteren habe ich noch nie ein Optionsargument mit key=value-Syntax geschweige denn mit key={value}-Syntax verwendet.
Die Sache wäre also eher etwas für comp.text.tex gewesen. Ich bitte, die Belästigung zu entschuldigen.
In meinem Fall kann ich mir bei der selbst gebastelten Dokumentklasse behelfen, indem ich nach Abarbeiten der Optionen für die Dokumentklasse mittels \ProcessKeyvalOptions aus dem kvoptions-Paket besagte problematische Optionen aus \@classoptionlist "herausnehme" und zusätzlich dafür sorge, dass sie sich auch nicht in der Optionenliste für die intern zu ladene KOMA-Skript-Klasse (bspw \opt@scrartcl.cls) befinden, bevor \LoadClass ausgeführt wird.
Ulrich
Was ich nicht ganz verstehe
Was ich nicht ganz verstehe ist, warum Du die geschweiften Klammern innerhalb des optionalen Arguments verwendest und so Gruppenklammern einfügt und nicht einfach das optionale Argument in geschweifte Klammern packst:
Auf dem Weg gibt es ja bekanntlich keine Gruppenklammern, sondern die geschweiften Klammern sind ganz normale Argumentklammern. Also dürfte das Problem dabei eigentlich nicht auftreten, oder?
Dann bekomme ich andere Fehlermeldungen
Wenn ich das ganze optionale Argument in geschweifte
Klammern setze, bekomme ich - zumindest unter
MiKTeX 2.4, das andere kann ich grade nicht
testen - andere obskure Fehlermeldungen.
Mit der Dokumentklasse
bekomme ich mit der Datei FOOBARA.TEX
folgende Warnung:
LaTeX Warning: Unused global option(s):
[paper=A4,fontsize=20pt,Textoption=FehlermeldungA].
und mit der Datei FOOBARB.TEX
folgende Fehlermeldung:
! LaTeX Error: File `AngekreuztFehlermeldungA]dummydocumentclass.cls' not found
Ulrich
Hier jeweils noch die .log-files:
FOOBARA.LOG:
FOOBARB.LOG:
Nicht mein Fehler
Für Fehler in fremden Paketen kannst Du mich nicht verantwortlich machen. Mit KOMA-Script funktioniert das, wie es soll und wie man das gewohnt ist:
Zum Vergleich einmal dasselbe ohne key-value-Auswertung:
Hier wird ganz klar nur die eine unbekannte Option "unbekannt=[x]wert" bemängelt.
Desweiteren sei darauf hingewiesen, dass Du Klassen und Pakete und ein TeX-System verwendest, für das es keinerlei Support mehr gibt. Dein erstes Beispiel FOOBARA.TEX ergibt mit aktuellen Versionen lediglich die Warnung:
FOOBARB.TEX ergibt die Warnung:
Alles getestet mit
Eigentlich hätte ich nicht gedacht, dass ich einen erfahrenen Anwender wie Dich darauf hinweisen muss: Vor einer Fehlermeldung sollte man immer prüfen, ob das Problem mit aktuellen Versionen noch auftritt. Das gilt ganz besonders dann, wenn man ein total veraltetes System verwendet!
Ich weiss, dass es nicht Dein Fehler ist...
Ich weiss, dass es nicht Dein Fehler ist. Habe mich ja auch bereits dafür entschuldigt, die Sache auf www.komascript.de zur Sprache gebracht zu haben anstatt bspw in comp.text.tex.
In meiner letzten Nachricht ging es mir nicht darum, irgendwen für irgendetwas verantwortlich zu machen, sondern ich wollte auf Anfrage hin darlegen, warum ich in meinen Ausführungen die Idee, einfach das ganze optionale Argument in geschweifte Klammern einzufassen, beisetie gelassen hatte.
Danke für den Tip, statt kvoptions scrbase zu verwenden.
Bei all meiner "Erfahrenheit als Anwender" ist mir voll bewusst, dass MiKTeX 2.4 veraltet ist. An dem Ort, an dem ich mich gestern Nacht befand, gibt es aber nur alte Rechner mit Win95(!) und MiKTeX 2.4 und ich konnte somit nicht mit was neuerem ausprobieren.
Sei dem wie ihm will - danke jedenfalls, dass Du meine Beispiele mit aktueller Distribution durchlaufen lassen und mir bestätigt hast, dass auch da noch das Verarbeiten von key-val Optionen durch den LaTeX-Kern (ich betone: LaTeX-Kern, nicht Koma-Script!) zu Problemen/Warnungen führt.
Ich betone nochmal: Mir ist inzwischen voll bewusst, dass die von mir angesprochenen Probleme beim LaTeX Kern und nicht bei KOMA-Script liegen und es tut mir leid, dass mir das nicht eher aufgefallen ist.
Ulrich