Sie sind hier

KOMA-Skript: Problem mit <Key>={<Value>}-Syntax in Dokumentklassen-Optionen

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

  • als Optionen <Key>-<Value>-Paare verarbeitet, bei welchen der
    <Value>-Teil unter Umständen in Klammern eingeschachtelt werden
    muss -- bspw, weil er wiederum eckige schliessende Klammern
    enthält, welche ansonsten das optionale \documentclass-Argument
    begrenzen würden
  • und dann intern eine der KOMA-Skript-Dokumentklassen nachlädt.

Bspw:

%%%
% 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)
Bild von Markus Kohm

Das ist kein spezifischer Bug in KOMA-Script, sondern ein Problem des LaTeX-Kerns. Dasselbe Problem tritt auf, wenn man eine Standardklasse verwendet:

\documentclass[paper=A4,fontsize={20pt}]{article}
\begin{document}
Test
\end{document}

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:

\documentclass[paper=A4,fontsize={20pt}]{minimal}
\usepackage[T1]{fontenc}
\begin{document}
Test
\end{document}

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:

\documentclass[paper=A4,fontsize= {20pt}]{scrartcl}
\begin{document}
Test
\end{document}

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:

\RequirePackage{filecontents}
\begin{filecontents*}{oargtest.cls}
\ProvidesClass{oargtest}[2010/11/04 v0.1 dummy class not to be used]
\show\@classoptionslist
\LoadClass{minimal}
\endinput
\end{filecontents*}
\documentclass[paper=A4,fontsize= {20pt}]{oargtest}
\usepackage[T1]{fontenc}
\begin{document}
Test
\end{document}

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:

\documentclass[pdfauthor={test}]{article}
\usepackage{hyperref}
\begin{document}
Test
\end{document}

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

Bild von Markus Kohm

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:

\documentclass[{paper=A4,
               fontsize=20pt,
               Textoption=[X]AngekreuztUndFehlermeldung%
%               Textoption=UnangekreuztKeineFehlermeldung%
               }]{dummydocumentclass}

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?

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

%%%
% 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'.

bekomme ich mit der Datei FOOBARA.TEX

%FOOBARA.TEX
\documentclass[{paper=A4,
               fontsize=20pt,
               Textoption=FehlermeldungA%
               }]{dummydocumentclass}
\begin{document}
\csname dummydocumentclass@Textoption\endcsname
\end{document}

folgende Warnung:
LaTeX Warning: Unused global option(s):
         [paper=A4,fontsize=20pt,Textoption=FehlermeldungA].

und mit der Datei FOOBARB.TEX

%FOOBARB.TEX
\documentclass[{paper=A4,
               fontsize=20pt,
               Textoption=[X]AngekreuztFehlermeldungA%
               }]{dummydocumentclass}
\begin{document}
\csname dummydocumentclass@Textoption\endcsname
\end{document}

folgende Fehlermeldung:
! LaTeX Error: File `AngekreuztFehlermeldungA]dummydocumentclass.cls' not found

Ulrich

Hier jeweils noch die .log-files:

FOOBARA.LOG:

This is e-TeX, Version 3.141592-2.2 (MiKTeX 2.4) (preloaded format=latex 2004.8.31)  4 NOV 2010 22:29
entering extended mode
**FOOBARA.TEX
(FOOBARA.TEX
LaTeX2e <2003/12/01>
Babel <v3.8g> and hyphenation patterns for english, dumylang, nohyphenation, ge
rman, ngerman, french, loaded.
(dummydocumentclass.cls
Document Class: dummydocumentclass 2010/11/03 v0.1beta test nonsense
(C:\MiKTeX\tex\latex\oberdiek\kvoptions.sty
Package: kvoptions 2009/08/13 v3.4 Keyval support for LaTeX options (HO)
 
(C:\MiKTeX\tex\latex\graphics\keyval.sty
Package: keyval 1999/03/16 v1.13 key=value parser (DPC)
\KV@toks@=\toks14
)
(C:\MiKTeX\tex\latex\oberdiek\kvsetkeys.sty
Package: kvsetkeys 2009/07/30 v1.5 Key value parser with default handler suppor
t (HO)
 
(C:\MiKTeX\tex\latex\oberdiek\infwarerr.sty
Package: infwarerr 2007/09/09 v1.2 Providing info/warning/message (HO)
)
(C:\MiKTeX\tex\latex\oberdiek\etexcmds.sty
Package: etexcmds 2007/12/12 v1.2 Prefix for e-TeX command names (HO)
Package etexcmds Info: Could not find \expanded.
(etexcmds)             That can mean that you are not using pdfTeX 1.50 or
(etexcmds)             that some package has redefined \expanded.
(etexcmds)             In the latter case, load this package earlier.
)))
(C:\MiKTeX\tex\latex\koma-script\scrartcl.cls
Document Class: scrartcl 2004/09/16 v2.9t LaTeX2e KOMA document class
(C:\MiKTeX\tex\latex\koma-script\scrlfile.sty
Package: scrlfile 2004/09/16 v2.9t LaTeX2e KOMA package
 
Package scrlfile, 2004/09/16 v2.9t LaTeX2e KOMA package
                  Copyright (C) Markus Kohm
 
) (C:\MiKTeX\tex\latex\base\size11.clo
File: size11.clo 2004/02/16 v1.4f Standard LaTeX file (size option)
)
(C:\MiKTeX\tex\latex\koma-script\typearea.sty
Package: typearea 2004/09/16 v2.9t LaTeX2e KOMA package
 
Package typearea, 2004/09/16 v2.9t LaTeX2e KOMA package
                  Copyright (C) Frank Neukam, 1992-1994
                  Copyright (C) Markus Kohm, 1994-2002
 
\ta@bcor=\skip41
\ta@div=\count79
\ta@hblk=\skip42
\ta@vblk=\skip43
\ta@temp=\skip44
Package typearea Info: These are the values describing the layout:
(typearea)             DIV  = 10
(typearea)             BCOR = 0.0pt
(typearea)             \paperwidth      = 597.50793pt
(typearea)              \textwidth      = 418.25555pt
(typearea)              \columnwidth    = 0.0pt
(typearea)              \columnsep      = 0.0pt
(typearea)              DIV-departure   = -6/100
(typearea)              \evensidemargin = 17.3562pt
(typearea)              \oddsidemargin  = 17.3562pt
(typearea)             \paperheight     = 845.04694pt
(typearea)              \textheight     = 595.80026pt
(typearea)              \topmargin      = -25.16531pt
(typearea)              \headheight     = 17.0pt
(typearea)              \headsep        = 20.40001pt
(typearea)              \topskip        = 11.0pt
(typearea)              \footskip       = 47.60002pt
(typearea)              \baselineskip   = 13.6pt
(typearea)              on input line 633.
)
\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=\skip45
\belowcaptionskip=\skip46
\c@pti@nb@sid@b@x=\box26
\bibindent=\dimen102
))
 
LaTeX Warning: Unused global option(s):
    [paper=A4,fontsize=20pt,Textoption=FehlermeldungA].
 
(FOOBARA.aux)
LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 5.
LaTeX Font Info:    ... okay on input line 5.
LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 5.
LaTeX Font Info:    ... okay on input line 5.
LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 5.
LaTeX Font Info:    ... okay on input line 5.
LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 5.
LaTeX Font Info:    ... okay on input line 5.
LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 5.
LaTeX Font Info:    ... okay on input line 5.
LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 5.
LaTeX Font Info:    ... okay on input line 5.
 [1
 
] (FOOBARA.aux) )
Here is how much of TeX's memory you used:
 840 strings out of 95890
 10434 string characters out of 1195146
 65482 words of memory out of 1069266
 3909 multiletter control sequences out of 60000
 3940 words of font info for 15 fonts, out of 1000000 for 2000
 14 hyphenation exceptions out of 4999
 36i,6n,29p,244b,126s stack positions out of 5000i,500n,10000p,200000b,32768s
 
Output written on FOOBARA.dvi (1 page, 256 bytes).

FOOBARB.LOG:

This is e-TeX, Version 3.141592-2.2 (MiKTeX 2.4) (preloaded format=latex 2004.8.31)  4 NOV 2010 22:35
entering extended mode
**FOOBARB.TEX
(FOOBARB.TEX
LaTeX2e <2003/12/01>
Babel <v3.8g> and hyphenation patterns for english, dumylang, nohyphenation, ge
rman, ngerman, french, loaded.
 
! LaTeX Error: File `AngekreuztFehlermeldungA]dummydocumentclass.cls' not found
.
 
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: cls)
 
Enter file name:
No file FOOBARB.aux.
LaTeX Font Info:    Checking defaults for OML/cmm/m/it on input line 6.
LaTeX Font Info:    ... okay on input line 6.
LaTeX Font Info:    Checking defaults for T1/cmr/m/n on input line 6.
LaTeX Font Info:    ... okay on input line 6.
LaTeX Font Info:    Checking defaults for OT1/cmr/m/n on input line 6.
LaTeX Font Info:    ... okay on input line 6.
LaTeX Font Info:    Checking defaults for OMS/cmsy/m/n on input line 6.
LaTeX Font Info:    ... okay on input line 6.
LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line 6.
LaTeX Font Info:    ... okay on input line 6.
LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line 6.
LaTeX Font Info:    ... okay on input line 6.
 
! LaTeX Error: The font size command \normalsize is not defined:
               there is probably something wrong with the class file.
 
See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...
 
l.6 \begin{document}
 
? x
 
Here is how much of TeX's memory you used:
 16 strings out of 95890
 501 string characters out of 1195146
 44793 words of memory out of 1048577
 3153 multiletter control sequences out of 60000
 3640 words of font info for 14 fonts, out of 1000000 for 2000
 14 hyphenation exceptions out of 4999
 10i,0n,7p,83b,26s stack positions out of 5000i,500n,10000p,200000b,32768s
No pages of output.
Bild von Markus Kohm

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:

\RequirePackage{filecontents}
\begin{filecontents*}{dummydocclass.cls}
\ProvidesClass{dummydocclass}[2010/11/05]
\RequirePackage{scrbase}
\DefineFamily{kvdemo}
\DefineFamilyMember{kvdemo}
\DefineFamilyKey{kvdemo}{Textoption}[StandardText]{%
  \def\dummydocclass@Textoption{#1}}
\FamilyProcessOptions{kvdemo}
\LoadClassWithOptions{scrartcl}
\end{filecontents*}
\documentclass[{fontsize=12pt,paper=a4,Textoption=[x]Fehlermeldung}]{dummydocclass}
\begin{document}
\csname dummydocclass@Textoption\endcsname
\end{document}

Zum Vergleich einmal dasselbe ohne key-value-Auswertung:

\documentclass[{12pt,unbekannt=[x]wert}]{article}
 
\begin{document}
\makeatletter\f@size\makeatother
\end{document}

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:

LaTeX Warning: Unused global option(s):
    [Textoption=FehlermeldungA].

FOOBARB.TEX ergibt die Warnung:

LaTeX Warning: Unused global option(s):
    [Textoption=[X]AngekreuztFehlermeldungA].

Alles getestet mit

 *File List*
filecontents.sty    2009/03/17 v1.2 Create an external file from within a LaTeX document
dummydocumentclass.cls    2010/11/03 v0.1beta test nonsense
kvoptions.sty    2010/02/22 v3.7 Keyval support for LaTeX options (HO)
  keyval.sty    1999/03/16 v1.13 key=value parser (DPC)
kvsetkeys.sty    2010/03/01 v1.9 Key value parser (HO)
infwarerr.sty    2010/04/08 v1.3 Providing info/warning/message (HO)
etexcmds.sty    2010/01/28 v1.3 Prefix for e-TeX command names (HO)
scrartcl.cls    2010/09/17 v3.07 KOMA-Script document class (article)
scrkbase.sty    2010/09/17 v3.07 KOMA-Script package (KOMA-Script-dependent basics and keyval usage)
 scrbase.sty    2010/09/17 v3.07 KOMA-Script package (KOMA-Script-independent basics and keyval usage)
scrlfile.sty    2009/03/25 v3.03 KOMA-Script package (loading files)
tocbasic.sty    2010/09/14 v3.06a KOMA-Script package (handling toc-files)
  size20.clo    1999/11/11 NON-Standard LaTeX file (size option)
typearea.sty    2010/09/17 v3.07 KOMA-Script package (type area)
 ***********

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

Comments for "KOMA-Skript: Problem mit &lt;Key&gt;={&lt;Value&gt;}-Syntax in Dokumentklassen-Optionen" abonnieren