PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Überschriften grau hinterlegen mit Koma-Script



rstuby
05-04-2010, 13:45
Hallo noch mal und frohe Ostern!
Da mein Dokument kaum richtige blockförmige Absätze enthält, sondern hauptsächlich kürzere Textzeilen und Notenblöcke, muss ich die Überschriften irgendwie hervorheben. Zuerst hatte ich das mit Hilfe des Pakets titlesec mit \titlerule für die Unterabschnitte gemacht. Lieber hätte ich die Überschriften aber grau hinterlegt - horizontale Linien gibt es in einem Dokument mit Noten auch so genug! Und titlesec soll sich ja nicht so besonders gut mit Koma-script vertragen.
Auf der Basis dieses Beispiels http://www.golatex.de/viewtopic,p,16894.html habe ich mir eine eitsprechende hellgraue Box gebastelt, die auch funktioniert hat. Dann wollte ich versuchen, ob man es ohne titlesec hinbekommt, den Abstand vor und hinter der Überschrift wieder je um ein \fboxsep zu verkürzen, was aber nicht geklappt hat. Ich dachte, ich hätte das Dokument wieder in die Ausgangsform zurückversetzt, aber leider sind die grauen Boxen nicht mehr um die Überschriften, sondern VOR jeder Überschrift steht eine kleine graue Box. Mit Text funktioniert es (s. Minimalbeispiel). Ich weiß auch gar nicht, was \dimexpr und \relax bedeuten, so dass ich selber nicht mehr durchfinde, was ich jetzt ändern muss. Wahrscheinlich ist es wieder was ganz Banales...

\documentclass{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage[ngerman]{babel}
\definecolor{silver}{gray}{.8}
\makeatletter
\newcommand*{\silverbox}[1]{\colorbox{silver}{%
\parbox{\dimexpr \linewidth-2\fboxsep\relax}{%
#1}}}
\makeatother
\addtokomafont{sectioning}{\silverbox}
\setcounter{secnumdepth}{-2}
\begin{document}
\chapter {erstes Kapitel}
\section{erster Abschnitt}
\subsection{erster Unterabschnitt}
\silverbox{Ein Text, der genauso hellgrau unterlegt sein soll, wie die Überschriften}
\subsection{zweiter Unterabschnitt}
Ein normaler Text, der nicht hellgrau unterlegt sein soll
\end{document}

lockstep
05-04-2010, 14:08
Dein Befehl \silverbox erwartet ein Argument (den Text, der innerhalb der Box gesetzt werden soll). \addtokomafont erlaubt (zumindest auf den ersten Blick) nur Befehle, die kein Argument erwarten - z.B. \sffamily und nicht \textsf{Text}. Was du brauchst, wäre ergänzender Code vor und nach dem Text der Überschrift - das bedeutet wohl "Hacken" der KOMA-Script-Überschriftenbefehle oder aber Verwenden von titlesec.

Zur Verträglichkeit von titlesec und KOMA-Script: titlesec ersetzt die KOMA-Steuerungsmöglichkeiten schlicht durch eigene. Mit den richtigen Befehlen lässt sich zumindest die KOMA-Schriftauswahl in titlesec-Überschriftenbefehle integrieren. Auch die weiteren Nebenwirkungen (z.B. bei Verwendung von hyperref) sind beherrschbar.

lockstep

EDIT: Die KOMA-Sript-Anleitung zu \setkomafont und \addtokomafont ist sogar recht eindeutig:


Die Verwendung anderer Anweisungen, inbesondere solcher, die Umdefinierungen vornehmen oder zu Ausgaben führen, ist nicht vorgesehen. Seltsames Verhalten ist in diesen Fällen möglich und stellt keinen Fehler dar.

voss
05-04-2010, 14:17
Da mein Dokument kaum richtige blockförmige Absätze enthält, sondern hauptsächlich kürzere Textzeilen und Notenblöcke, muss ich die Überschriften irgendwie hervorheben. Zuerst hatte ich das mit Hilfe des Pakets titlesec mit \titlerule für die Unterabschnitte gemacht. Lieber hätte ich die Überschriften aber grau hinterlegt - horizontale Linien gibt es in einem Dokument mit Noten auch so genug! Und titlesec soll sich ja nicht so besonders gut mit Koma-script vertragen.
Auf der Basis dieses Beispiels http://www.golatex.de/viewtopic,p,16894.html habe ich mir eine eitsprechende hellgraue Box gebastelt, die auch funktioniert hat. Dann wollte ich versuchen, ob man es ohne titlesec hinbekommt, den Abstand vor und hinter der Überschrift wieder je um ein \fboxsep zu verkürzen, was aber nicht geklappt hat. Ich dachte, ich hätte das Dokument wieder in die Ausgangsform zurückversetzt, aber leider sind die grauen Boxen nicht mehr um die Überschriften, sondern VOR jeder Überschrift steht eine kleine graue Box. Mit Text funktioniert es (s. Minimalbeispiel). Ich weiß auch gar nicht, was \dimexpr und \relax bedeuten, so dass ich selber nicht mehr durchfinde, was ich jetzt ändern muss. Wahrscheinlich ist es wieder was ganz Banales...


Bespiel für \section, die anderen musst du analog anpassen.

Herbert

\documentclass{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xcolor}
\usepackage[ngerman]{babel}
\definecolor{silver}{gray}{.8}
\newcommand*\silverbox[1]{\colorbox{silver}{%
\parbox{\dimexpr \linewidth-2\fboxsep\relax}{%
#1}}}
\let\Section\section
\def\section#1{\Section[#1]{\protect\silverbox{#1}}}

\setcounter{secnumdepth}{-2}
\begin{document}
\chapter {erstes Kapitel}
\section{erster Abschnitt}
\subsection{erster Unterabschnitt}
\silverbox{Ein Text, der genauso hellgrau unterlegt sein soll, wie die Überschriften}
\subsection{zweiter Unterabschnitt}
Ein normaler Text, der nicht hellgrau unterlegt sein soll
\end{document}

lockstep
05-04-2010, 14:17
Ich muss zurücknehmen, was ich zu \silverbox gesagt habe - zumindest die ursprüngliche Variante von Markus Kohm funktioniert, wenn ich auch nicht verstehe, warum (und obwohl auch die Anleitung das Gegenteil zu sagen scheint). Ich seh mir die Sache näher an.

lockstep

lockstep
05-04-2010, 14:39
Herbert Voss hat schon eine Lösung gefunden. Ich kann nur ergänzen: Das Hinzufügen von \silverbox mittels \addkomafont funktioniert nicht für das Element sectioning, jedoch (warum auch immer) für einzelne Überschriften ab section. Bei chapter treten ... Nebenwirkungen auf (insbesondere bei nummerierten Kapiteln). Außerdem muss der Befehl \silverbox als letztes Element hinzugefügt werden:



\addtokomafont{section}{\rmfamily\silverbox}% funktioniert
\addtokomafont{section}{\silverbox\rmfamily}% funktioniert nicht


lockstep

rstuby
05-04-2010, 14:54
Wow, da kann man ja auch gleich die Korrektur für die Abstände mit einbauen:

\let\Section\section
\def\section#1{\vspace{-\fboxsep}\Section[#1]{\protect\silverbox{#1}}\vspace{-\fboxsep}}

mechanicus
05-04-2010, 15:03
Hi,


Das Hinzufügen von \silverbox mittels \addkomafont funktioniert nicht für das Element sectioning, jedoch (warum auch immer) für einzelne Überschriften ab section.

Das liegt an der Definition von section und abwärts:

\newcommand\section{\@startsection{section}{1}{\z@ }%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\ifnum \scr@compatibility>\@nameuse{scr@v@2.96}\relax
\setlength{\parfillskip}{\z@ plus 1fil}\fi
\raggedsection\normalfont\sectfont\nobreak\size@se ction}%
Entscheidend sind die rot markierten Befehle. sectfont erhält seine Definition aus sectioning bzw. disposition. Setzt du also für sectioning die Silverbox, so wird \nobreak an die box übergeben. \size@section entsteht aus der bekannten Eingabe \addkomafont{section}. Gibst du hier die box als letztes an, wird die GRUPPE "Überschrift" als Argument an die silverbox übergeben. Das erklärt auch, warum deine verdrehte Reihenfolge nicht funzt.





Bei chapter treten ... Nebenwirkungen auf (insbesondere bei nummerierten Kapiteln).
Das ist üblich. Ab der Ebene section wird die Anweisung \@startsection{section} verwendet. Bei chapter hingegen gibt es extra ein Makro für das Aussehen.

Hoffe hilft dir.

Gruß
Marco

lockstep
05-04-2010, 15:17
Gibst du hier die box als letztes an, wird die GRUPPE "Überschrift" als Argument an die silverbox übergeben.

Mir war nicht klar, warum überhaupt etwas als Argument übergeben wird. Habe jetzt jedoch in den LaTeX 2e Sources folgende Erklärung zum Argument "style" von \@startsection gefunden:


Since June 1996 release the last command in this argument may be a command such as \MakeUppercase or \fbox that takes an argument. The section heading will be supplied as the argument to this command. So setting #6 to, say, \bfseries\MakeUppercase would produce bold, uppercase headings.
lockstep

rstuby
05-04-2010, 15:30
Ach so, dann verstehe ich auch, wie es bei mir gelaufen ist: In Wirklichkeit hat es nicht mehr funtioniert, seit ich "sectioning" benutzt habe, aber weil ich irgendwelche Hilfsfiles nicht gelöscht hatte, waren beim ersten Mal die Überschriften noch grau.