Section-Überschrift mit hintergrundbild

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Section-Überschrift mit hintergrundbild

Beitrag von Laures »

Hi,

Ich wollte für section-Überschriften ein Hintergrundbild definieren und dafür die overpic-Umgebung verwenden. Die \chapter Umsetzung von KOMA, die ich als Grundlage verwenden wollte, hat mich jetzt aber verwirrt.

Bei section hatte ich etwas erwartet wie
\newcommand{\section}[1]{....}
Laut scrsource hat section aber überhaupt keine Parameter.

Wie funktionieren diese Gliederungsbefehle und wo kann ich meine overpic-Umgebung einfügen?
programming is like sex, one mistake and you have to support it for the rest of your life

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2526
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: Section-Überschrift mit hintergrundbild

Beitrag von Stefan Kottwitz »

Hallo Laures,
Laures hat geschrieben: Ich wollte für section-Überschriften ein Hintergrundbild definieren und dafür die overpic-Umgebung verwenden. Die \chapter Umsetzung von KOMA, die ich als Grundlage verwenden wollte, hat mich jetzt aber verwirrt.
\chapter hat doch auch nichts mit section-Überschriften zu tun.
Laures hat geschrieben: Laut scrsource hat section aber überhaupt keine Parameter.
Wie funktionieren diese Gliederungsbefehle und wo kann ich meine overpic-Umgebung einfügen?
\section ruft \@startsection auf, das verarbeitet den Titel.
Wie genau, das kannst Du im Code Deiner Dokumentklasse nachlesen, also in scrbook.cls oder scrreprt.cls. Du könntest \section redefinieren oder Dich "einklinken", z.B. mit \addtokomafont{section}{...} falls das keine ungewollten Nebeneffekte hat - denn das wäre nur ein schneller hack.

Viele Grüße,

Stefan

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

ich meinte natürlich die \section implementierung.

Ok, \@startsection verarbeitet den titel, das hatte ich mir gedacht. Aber wo kriegt es den Titel den ich angegeben habe her wenn \section keine parameter hat. Und direkt daraus folgt die frage was die klammern hinter \section machen, wenn sie kein Parameter sind.
\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@section
}%
}
Wenn ich da irgendwo meine Umgebung reinpacken will müsste ich zumindest wissen wo der titel erzeugt wird.
programming is like sex, one mistake and you have to support it for the rest of your life

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2526
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

\section

Beitrag von Stefan Kottwitz »

Laures hat geschrieben:Aber wo kriegt es den Titel den ich angegeben habe her wenn \section keine parameter hat. Und direkt daraus folgt die frage was die klammern hinter \section machen, wenn sie kein Parameter sind.
\@startsection ruft noch weitere Makros auf. Der Titel-Parameter wird dann eben später genommen und verarbeitet. Das im weiteren aufgerufene \@sect z.B. schluckt 8 Parameter. Du findest das mit texdoc source2e in 61.2 Sectioning.

Stefan

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

Ich muss parameter also nicht explizit an verwenden, sondern sie stehen auch so später zur verfügung? aua....
programming is like sex, one mistake and you have to support it for the rest of your life

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

Hallo,

Nach entwas grübeln habe ich mein Bilderproblem dadurch gelöst, dass ich einen command an die definition von \section herangehängt habe.

Im testpackage.sty steht jetzt:
\RequirePackage{overpic}
\RequirePackage{graficx}
\newcommand{\dnd@secimage}[1]{
	\includegraphics[width=\columnwidth]{image}
	\begin{overpic}[width=\columnwidth,unit=1pt]{image}
		\put(5,6){\mbox{\raggedsection\normalfont\sectfont\nobreak\size@section\MakeUppercase{#1}}}
  \end{overpic}  
}
\renewcommand\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
		\dnd@secimage
	}%
}
Das funktioniert auch ganz gut. Leider ist der gesammte Section-Titel-Bereich scheinbar um ein paar millimeter nach rechts verschoben, da die bilder im Titel trotz einem Einzug von 0 nicht direkt übereinader liegen.

Das liegt offenbar nicht an overpic, da die overpic umgebung und das darüberliegende includegrafics gleich abschließen.
\documentclass[twoside,twocolumn,10pt,pdftex]{scrbook}
\usepackage{testpackage}
\usepackage{graficx}

\begin{document}
\section{test}
\includegraphics[width=\columnwidth]{image}
\end{document}
In dem Beispiel schließen overpic und das bild im titelbereich gleich ab, liegen aber nicht so wie das bild im text.

EDIT:

Manche dummen Lösungen kommen mir erst nach Stunden. Ein wohlplatziertes hspace mit negativem wert und schon sitzen die bilder richtig.

Würde mich trotzdem interessieren warum includegrafics befehle (overpic nutzt den ja auch) im Section-Titel leicht versetzt angezeigt werden.
programming is like sex, one mistake and you have to support it for the rest of your life

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Laures hat geschrieben:
\newcommand{\dnd@secimage}[1]{ % <-- HIER
	\includegraphics[width=\columnwidth]{image} % <--HIER
	\begin{overpic}[width=\columnwidth,unit=1pt]{image}
		\put(5,6){\mbox{\raggedsection\normalfont\sectfont\nobreak\size@section\MakeUppercase{#1}}}
  \end{overpic}  
}
Du hast min. an den markierten Stellen signifikante Leerzeichen (in Deinem Original in Form von Zeilenenden, näheres siehe in der verlinkten Seite).

Statt overpic könnte man übrigens auch etwas wie:
\documentclass{scrartcl}
\usepackage[demo]{graphicx}
\usepackage{xcolor}
\addtokomafont{section}{\rlap{\Hintergrundbild}}
\newcommand*{\Hintergrundbild}{}


\begin{document}
\renewcommand*{\Hintergrundbild}{%
  \raisebox{\dimexpr-\ht\strutbox-.5\totalheight\relax}[.5\totalheight][\dp\strutbox]{%
    \color{lightgray}\includegraphics{grafik}%
  }%
}
\section{Test}

Test

\section{Noch ein Test}

Text
\end{document}
ausprobieren. Statt mit \rlap kann man auch ganz sauber mit \makebox[0pt][l] arbeiten.

Das über \setkomafont zu machen, ist zwar nicht ganz sauber, aber auf section-Ebene funktioniert es. Die vertikale Verschiebung des Hintergrundbildes ist durch Veränderung der \raisebox-Parameter möglich.

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

die Leerzeichen waren wohl beim Pasten ins forum dazugekommen. Im Code sind sie nicht.

Ich werde jetzt wohl auf deine Lösung wechseln, obwohl ich vermutlich trotzdem \section überschreiben werde, um das Komafont frei zu haben.

Meine Lösung über overpic hatte wegen des Parameters, den mein Makro brauchte, den unangenehmen nachteil das es meine PDF links auf section ebene zerstörte.

Genaueres: http://www.golatex.de/fehler-bei-verlin ... t4816.html
programming is like sex, one mistake and you have to support it for the rest of your life

Laures
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Do 6. Aug 2009, 19:48

Beitrag von Laures »

Ich hab beim Testen grade festgestellt, das bei deinem Code das bild nicht hinter dem Text ist. Ich habe jetzt hinter die raisebox einen zeilenumbruch gesetzt und es funktioniert wieder.
programming is like sex, one mistake and you have to support it for the rest of your life

Antworten