Sie sind hier

Experiment: Gliederungsbefehle

Bild von Markus Kohm

Als erstes habe ich angefangen das optionale Argument der Gliederungsbefehle (\part, \addpart, \chapter, \addchap, \section, \addsec, \subsection, \subsubsection, \paragraph und \subparagraph) neu zu spezifizieren und zu implementieren. Dazu wurde auch in den LaTeX-Kernel eingegriffen, konkret wurde \@sect umdefiniert. Aufgrund dieser Änderung sollte screxperimental möglichst früh geladen werden, insbesondere vor anderen Paketen, die \@sect ändern, beispielsweise hyperref.

Solange sich im optionalen Argument der Gliederungsbefehle kein Gleichheitszeichen befindet, bleibt alles wie es ist. Sobald jedoch ein Gleichheitszeichen darin ist wird das Argument als key=value-Liste mit folgenden Paaren interpretiert:

head=Text
Für den Kolumneneintrag wird Text verwendet. Es wird empfohlen Text in geschweifte Klammern zu setzen.
tocentry=Text
Für den Inhaltsverzeichniseintrag wird Text verwendet. Ist Text komplett leer, so wird kein Inhaltsverzeichniseintrag erzeugt. Es wird empfohlen nicht leere Werte für Text in geschweifte Klammern zu setzen.

Für weggelassene Paare wird automatisch das nicht optionale Argument verwendet.

Darüber hinaus werden folgende KOMA-Script-Optionen (zu setzen beim Laden von screxperimental oder per \KOMAoption oder \KOMAoptions) zur Steuerung der Gliederungsbefehle unterstützt:

OptionalSectionArgument=TOCandHead
Befindet sich kein Gleichheitszeichen im optionalen Argument eines Gliederungsbefehls, wird das optionale Argument für den Eintrag ins Inhaltsverzeichnis und den Kolumnentitel verwendet.
OptionalSectionArgument=TOC
Befindet sich kein Gleichheitszeichen im optionalen Argument eines Gliederungsbefehls, wird das optionale Argument für den Eintrag ins Inhaltsverzeichnis und das obligatorische für den Kolumnentitel verwendet.
OptionalSectionArgument=Head
Befindet sich kein Gleichheitszeichen im optionalen Argument eines Gliederungsbefehls, wird das obligatorische Argument für den Eintrag ins Inhaltsverzeichnis und das optionale für den Kolumnentitel verwendet.

Status des Experiments:

  • in screxperimental deprecated und nur noch als Wrapper für die in scrbook, scrreprt und scrartcl ab Version 3.10 enthaltene Funktion zu finden
  • getestet und in KOMA-Script als stabil übernommen

Kommentare

Ich bin erst jetzt dazu gekommen, die neuen Möglichkeiten, die "screxperimental" bietet, in einem längeren Dokument zu testen (ein wenig schlechtes Gewissen hab ich schon, da ich ja irgendwie Auslöser für die Arbeit war). Wie nicht anders zu erwarten, funktioniert speziell der von mir benötigte Aufruf

  \section[head={Kurztitel}]{Langtitel}

genau wie beschrieben. Wäre die Funktionalität bereits in KOMA-Script enthalten, würde ich mich nicht scheuen, sofort alles umzustellen.

Noch eine Idee dazu, die allerdings nicht sehr wichtig ist. Nur wenn sie sich ohne größeren Aufwand realisieren ließe, würde ich dafür plädieren. Normalerweise wird man sich in einem Dokument (z.B. in einem Buch) entscheiden, in welcher Weise die kurzen Abschnittstitel verwendet werden. Es von Fall zu Fall unterschiedlich zu machen, ist sicher unüblich und sogar unsinnig. In meinem Fall will ich immer, dass nur im Seitenkopf ein verkürzter Text auftaucht. Im Fließtext und im Inhaltsverzeichnis soll immer der lange Text zu lesen sein. Mein Wunsch -- unter Vorbehalten (siehe oben) -- wäre nun, mir die Angabe "head=xxx" sparen zu können, nämlich so:

  \documentclass[shortSectInHead=true]{scrbook}
  ...
  \section[Kurztitel]{Langtitel}

"shortSectInToc" würde es dann auch noch geben und die key-value-Syntax sollte auch dann noch gültig bleiben. Abgesehen von weniger Tipparbeit wäre ein weiterer Vorteil, dass die Syntax weiterhin der der Standardklassen entspräche, womit ggf. ein Austausch leicht möglich wäre. Jemandem, der denselben Wunsch wie ich verspürt, könnte man -- wie in vielen anderen Fällen -- auch hier sagen: Nimm einfach eine der KOMA-Script-Klassen und Du hast, was Du brauchst.

...Rolf

Bild von Markus Kohm

Ich habe die zusätzliche Möglichkeit implementiert. Die Wahl der Grundeinstellung habe ich dabei allerdings über nur eine Option mit drei verschiedenen Werten gelöst (siehe geänderte Beschreibung). Getestet habe ich die Änderung selbst nur an \part, hoffe aber, dass die anderen Gliederungsbefehle entsprechend funktionieren.

Möglicherweise werde ich das dann so in die Klassen einbauen, dass die ganze Geschichte nur aktiviert wird, wenn diese Option mit einem der drei Werte auch verwendet wird. Darüber muss ich noch nachdenken. Bis dahin wäre es gut, wenn noch ein paar Leute mehr das einfach mal testen würden, um zu sehen, welche Pakete damit eventuell ein Problem haben.

Ich habe die neue Version mit der Möglichkeit, das Verhalten bereits beim Laden des Paketes festzulegen, getestet. Es funktioniert in dem folgenden Beispiel nicht:

\listfiles
\documentclass[fontsize=11pt,paper=a4,pagesize]{scrbook}
\usepackage{scrpage2}
\usepackage{screxperimental}
%\usepackage[OptionalSectionArgument=Head]{screxperimental}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern,blindtext}
 
\newcommand*\TEXT{%
  \blindtext\clearpage
  \blindtext\clearpage}
 
\pagestyle{scrheadings}
 
\begin{document}
  \tableofcontents
  \chapter[AAA]{AAAAAAAAAAAAAAAAAAAAAAAAAA}
  \section[FOO]{FOOOOOOOOOOOOOOOOOOOOOOOOO} \TEXT
  \section[BAR]{BARRRRRRRRRRRRRRRRRRRRRRRR} \TEXT
  \section[BAZ]{BAZZZZZZZZZZZZZZZZZZZZZZZZ} \TEXT
 
  \chapter[BBB]{BBBBBBBBBBBBBBBBBBBBBBBBBB}
  \section[FOO]{FOOOOOOOOOOOOOOOOOOOOOOOOO} \TEXT
  \section[BAR]{BARRRRRRRRRRRRRRRRRRRRRRRR} \TEXT
  \section[BAZ]{BAZZZZZZZZZZZZZZZZZZZZZZZZ} \TEXT
\end{document}

Ohne optionales Argument bei "screxperimental" erscheinen im Kopf und im Inhaltsverzeichnis nur das Wort "section". Mit der Option "OptionalSectionArgument=Head" steht im Inhaltsverzeichnis immer "1". Die Versionen:

 *File List*
 scrbook.cls    2010/02/15 v3.05 KOMA-Script document class (book)
scrkbase.sty    2010/02/15 v3.05 KOMA-Script package (KOMA-Script-dependent bas
ics and keyval usage)
 scrbase.sty    2010/02/15 v3.05 KOMA-Script package (KOMA-Script-independent b
asics and keyval usage)
  keyval.sty    1999/03/16 v1.13 key=value parser (DPC)
scrlfile.sty    2009/03/25 v3.03 KOMA-Script package (loading files)
tocbasic.sty    2010/01/05 v3.04b KOMA-Script package (handling toc-files)
scrsize11pt.clo    2010/02/15 v3.05 KOMA-Script font size class option (11pt)
typearea.sty    2010/02/15 v3.05 KOMA-Script package (type area)
screxperimental.sty    2010/04/13 v0.1.1-alpha experimental features for KOMA-S
cript
inputenc.sty    2008/03/30 v1.1d Input encoding file
  latin1.def    2008/03/30 v1.1d Input encoding file
 fontenc.sty
   t1enc.def    2005/09/27 v1.99g Standard LaTeX file
   babel.sty    2008/07/06 v3.8l The Babel package
ngermanb.ldf    2008/07/06 v2.6n new German support from the babel system
blindtext.sty    2009/12/29 V1.9c blindtext-Package
  xspace.sty    2006/05/08 v1.12 Space after command names (DPC,MH)
  t1cmss.fd    1999/05/25 v2.5h Standard LaTeX font definitions
 ***********

...Rolf

Bild von Markus Kohm

Ich war beim Einbau der neuen Optionen etwas zu unsorgfältig. Konkret habe ich fast gleichen Code mehrfach kopiert und dabei nicht darauf geachtet, dass in einem Fall die relevanten Argumente nicht #1 und #2, sondern #7 und #8 sind. Jetzt sollte es wieder funktionieren.

Nun funktioniert es. Ich hab nun noch mal über die ganze Angelegenheit nachgedacht. Mir persönlich würde die Paket- bzw. spätere Klassenoption "OptionalSectionArgument" völlig genügen. Die key/val-Optionen für die einzelnen Abschnitts-Makros würde ich nicht verwenden. Ich will damit sagen, dass man überlegen könnte, nur die globale Einstellmöglichkeit anzubieten, was den Code sicher vereinfachen würde und auch potenzielle Inkompatibilitäten mit anderen Paketen verringern würde.

...Rolf

Bild von Markus Kohm

Die einzige Vereinfachung für den Code wäre, dass der Test, ob das optionalen Argument eine key=value-Syntax hat, entfallen könnte. Ansonsten wären die Änderungen grundsätzlich die gleichen. Der Code für die Paketoptionen nimmt hingegen nur ein paar Zeilen ein (Paketoptionen auswerten und je Anweisung eine primitive Fallunterscheidung). Bezüglich der Kompatibilität mit andere Paketen dürfte sich dadurch nichts ändern.

Comments for "Experiment: Gliederungsbefehle" abonnieren