PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tweaking fncychap v1.34



X-Bit
07-01-2009, 14:57
Hallo @all!

Da mir hier so super geholfen wurde möchte ich kurz ein paar Ideen zum Package fncychap in der aktuellen Version 1.34 hier für andere interessierte Leser deponieren. Entschuldigt, wenn ich Ausdrücke falsch verwende... ich bin kein LaTeX-Profi... auf jeden Fall im Moment noch nicht:rolleyes:

Grundsätzlich geht es mir um die Abstände welche ich optisch als zu gross empfinde und, leider, habe ich noch keine für mich brauchbaren Anleitungen zu diesem Thema gefunden.

Alle Änderungen werden im jeweiligen Dokument vorgenommen. Ich empfinde diese Lösung als "sauberer", da das Verändern der *.sty Datei permanent sind und somit, vielleicht in einem anderen Fall, unerwünscht.

Für Anfänger, wie ich es bin, kurz die Einleitung zu jeder dieser Veränderungen im Dokument welche vor "\begin{document}" ein zu fügen sind (stimmts, mechanicus?;)):



\makeatletter
... >>> Hier die jeweiligen Veränderungen einfügen!
\makeatother

Ich verwende das Layout "Glenn". Wenn man die fncychap.sty studiert (bei mir zu finden unter "C:\Programme\MiKTeX 2.7\tex\latex\fncychap", was aber je nach LaTeX Packet verschieden sein kann), was ich auf jeden Fall anrate, versteht man schnell, dass je nach Layout eine entsprechend andere Massnahme nötig ist und meine Vorlagen entsprechend abgeändert werden müssen. Aber es ist nicht so schwierig! Eigentlich kann man die entsprechenden Zeilen mit Copy/Paste in sein Dokument übernehmen und noch ein wenig abändern...

Zum Beispiel wird aus:
\renewcommand{\DOTI}

einfach nur
\renewcommand\DOTI

...ist wirklich keine Hexerei und die restlichen Zeilen können mehrheitlich genau so belassen werden, wie man sie aus der fncychap.sty herauskopiert.


Grundsätzlich aber kann man folgendes festhalten:

1. Abstand für Kapitel oben verringern
Diese Einstellung ist für alle Layouts gültig. Es wird der Abstand vom Kapitel-Layout OBEN verringert indem man mit der Zahl bei "\vspace" experimentiert. Das gilt nicht für ToC usw...
In meinem Fall also:


\renewcommand*\@makechapterhead[1]{%
\vspace*{-10\p@} % Hier wird der Abstand oben verringert
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter%
\DOCH
\fi
\fi
\interlinepenalty\@M
\DOTI{#1}
}}

Ab hier unterscheiden sich die Informationen, je nach gewünschtem Layout. Alle Layouts sind aber innerhalb der fncychap.sty mit "%%%%%%% Layout DEF" gekennzeichnet und sind somit schnell in einem Editor auffindbar.

2. Kapitelabstand unten verringern.
Grundsätzlich wird über "DOTI" der Abstand UNTEN definiert. Dies geschieht erst global, wird aber jeweils von den Layouts überschrieben. Es ist deshalb wichtig, die vom gewünschten Layout angegebenen Parameter zu verwenden.

In meinem Fall für "Glenn":

\renewcommand\DOTI[1]{%
\addtolength{\pyy}{-4pt}
\settoheight{\myhi}{\CTV\FmTi{#1}}
\addtolength{\myhi}{\py}
\addtolength{\myhi}{-1\RW}
\vskip -1\pyy
\rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt
\raggedleft\CTV\FmTi{#1}\par\nobreak
\vskip 50\p@} % Hier wird der Abstand nach unten angegeben

3. Abstand für Index neu definieren.
Dies geschieht über "DOTIS" welcher genauso erst global, dann im jeweiligen Layout definiert wird.

Bei mir und für "Glenn" sieht es so aus:

\renewcommand\DOTIS[1]{%
\setlength{\py}{25pt} % eller vad man vill >>>Hier wir übrigens die Höhe der "Box" definiert.
\setlength{\pyy}{\py}
\setlength{\backskip}{\py}
\addtolength{\backskip}{2pt}
\addtolength{\pyy}{\RW}
\setlength{\myhi}{\baselineskip}
\addtolength{\myhi}{\pyy}
\mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak
\vskip -1\backskip
\rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 3pt %
\raggedleft\CTV\FmTi{#1}\par\nobreak
\vskip 30\p@ % Hier wird der Abstand nach unten angegeben

Nachtrag: Mit viel Schützenhilfe und ein paar höchst logischen Überlegungen ("\tableofcontents" kommt nach "\begin{document}"... danke Marco!) hier nun noch das fehlende Teil.

4 . ToC (also der Seitenindex usw.) nach oben verschieben. Dieser Bereich ist global definiert (wie auch der Punkt 1) und nicht vom jeweiligen Layout abhängig.

Auch dieser Teil wird mit



\makeatletter
.... >>> Veränderungen einfügen!
\makeatother


eingeleitet!



\def\@makeschapterhead#1{%

% Nicht zu verwechseln mit makechapterhead von Punkt 1!

\vspace*{50\p@} % Hier wird der Abstand nach oben verringert
{\parindent \z@ \raggedright
\normalfont
\interlinepenalty\@M
\DOTIS{#1}
\vskip 40\p@
}}



Ich hoffe diese kurze Erklärung hilft Anfängern wie mir und ich bedanke mich nochmals ganz herzlich bei Marco für die unermüdliche Schützenhilfe!

P.s.: Vielleicht ist es noch wichtig zu sagen, dass alle Werte für die Abstände auch minus (z.B. {-50\p@} sein können), man muss einfach ein wenig experimentieren!

mechanicus
07-01-2009, 15:35
Alle Änderungen werden im jeweiligen Dokument vorgenommen. Ich empfinde diese Lösung als "sauberer", da das Verändern der *.sty Datei permanent sind und somit, vielleicht in einem anderen Fall, unerwünscht.
Wenn ein update der sty-Datei kommt, sind deine Änderungen hinfällig. Also richtige Entscheidung


Für Anfänger, wie ich es bin, kurz die Einleitung zu jeder dieser Veränderungen im Dokument welche vor "\begin{document}" ein zu fügen sind (stimmts, mechanics?;)):



\makeatletter
... >>> Hier die jeweiligen Veränderungen einfügen!
\makeatother

Das gilt nur, wenn ein @ in der Zeichenfolge steht. Das ist eine reine Vorsichtsmassnahme, dass nicht ein Laie so einfach im Makro rumspielt.
Aber du weiß ja Ausnahmen bestätigen die Regel. Man kann das auch innerhalb anwenden:rolleyes::p



Zum Beispiel wird aus:
\renewcommand{\DOTI}

einfach nur
\renewcommand\DOTI

Das ist genau das selbe. Man kann die Klammer setzen, muss aber nicht.

Auf den bestem Wege ein Profi zu werden:cool:
Die absoluten Profis (rais, voss, sommerfee,....) kommen aber bestimmt noch.

Gruß
Marco

X-Bit
07-01-2009, 18:07
...jetzt hab ich vielleicht noch eine echt dumme Frage:

Ich würde gerne in meinem Dokument den Hinweis auf LaTeX 2e machen. \LaTeX macht ja den Schriftzug richtig, wie krieg ich aber das "2e" sauber hin?!

Ich habs mal mit


\begin{equation}
\LaTeX
\
2\epsilon
\end{equation}

versucht aber da erhalte ich immer noch ein (0.1) rechts davon.

Kann mir da wer helfen?!:rolleyes:

localghost
07-01-2009, 18:13
[...]Ich würde gerne in meinem Dokument den Hinweis auf LaTeX 2e machen. \LaTeX macht ja den Schriftzug richtig, wie krieg ich aber das "2e" sauber hin?! [...]

\LaTeXe


MfG
Thorsten¹

X-Bit
07-01-2009, 18:26
Tja... was man weiss, das weiss man:D

Danke!

X-Bit
08-01-2009, 14:50
....
Wo ich noch nicht dahinter gekommen bin, ist, wo der Abstand OBEN vom ToC geändert werden kann. Allfällige Hinweise oder Beobachtungen sind herzlich erwünscht!

Ich hoffe diese kurze Erklärung hilft Anfängern wie mir!


Wir sind hier wohl kurz vom Thema abgekommen... Zur Komplettierung des kleinen "How-To´s" wäre ich froh, wenn mir jemand hier noch kurz unter die Schulter greifen könnte:o

Besten Dank!

mechanicus
08-01-2009, 20:03
Hallo,

wir wollen natürlich diese Frage nicht unter den Tisch fallen lassen:

\documentclass[12pt,ngerman]{scrreprt}
\usepackage{babel}
\usepackage[showframe]{geometry}
\usepackage{blindtext}
\usepackage[Glenn]{fncychap}

\makeatletter
%Abstand nach oben für Kapitel:
\def\@makechapterhead#1{%
\vspace*{10\p@}%% Hier wird der Abstand oben verringert
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 040920
\DOCH
\fi
\fi
\interlinepenalty\@M
\if@mainmatter%%%%% Fix for frontmatter, mainmatter, and backmatter 060424
\DOTI{#1}%
\else%
\DOTIS{#1}%
\fi
}}
%Abstand nach unten für Kapitel:
\renewcommand\DOTI[1]{%
\addtolength{\pyy}{-4pt}
\settoheight{\myhi}{\CTV\FmTi{#1}}
\addtolength{\myhi}{\py}
\addtolength{\myhi}{-1\RW}
\vskip -1\pyy
\rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 2pt
\raggedleft\CTV\FmTi{#1}\par\nobreak
\vskip 50\p@} % Hier wird der Abstand nach unten angegeben
%Abstand Toc oben
\def\@makeschapterhead#1{%
\vspace*{5\p@}%% Hier wird der Abstand oben verringert
{\parindent \z@ \raggedright
\normalfont
\interlinepenalty\@M
\DOTIS{#1}
\vskip 40\p@
}}
%Abstand Toc unten
\renewcommand\DOTIS[1]{%
\setlength{\py}{20pt} % eller vad man vill >>>Hier wir übrigens die Höhe der "Box" definiert.
\setlength{\pyy}{\py}
\setlength{\backskip}{\py}
\addtolength{\backskip}{2pt}
\addtolength{\pyy}{\RW}
\setlength{\myhi}{\baselineskip}
\addtolength{\myhi}{\pyy}
\mghrulefill{\RW}\rule[-1\py]{2\RW}{\pyy}\par\nobreak
\vskip -1\backskip
\rule{2\RW}{\myhi}\mghrulefill{\RW}\hskip 3pt %
\raggedleft\CTV\FmTi{#1}\par\nobreak
\vskip 0\p@} % Hier wird der Abstand nach unten angegeben
\makeatother

\begin{document}
\tableofcontents
\chapter{foo}
\blindtext[3]
\chapter{foo}
\blindtext[3]
\end{document}

Gruß
Marco

X-Bit
09-01-2009, 00:35
Marco... wenn ich jetzt sage "das wollt ich auch gleich schreiben"... dann würd ich lügen;) !

Ich hab das jetzt probiert, analog zu den Beispielen oben, entsprechend zu verpacken... doch leider scheint das so nicht zu klappen.

Hier mein Minimalbeispiel:


%----Präambel

\documentclass[paper=a4,12pt,DIV12]{scrreprt}
\usepackage[ngerman]{babel} %Trennungen, Schriftsatz; Neue deutsche Rechtschreibung
\usepackage[showframe]{geometry}
\usepackage[ansinew]{inputenc} %Dateicodierung
\usepackage[T1]{fontenc} %Umlaute, Sonderzeichen...
\usepackage[Glenn]{fncychap}
\usepackage{scrpage2}
\usepackage{blindtext}

%Abstand Toc oben

\makeatletter
\def\@makeschapterhead#1{%
\vspace*{-35\p@}%% Hier wird der Abstand oben verringert
{\parindent \z@ \raggedright
\normalfont
\interlinepenalty\@M
\DOTIS{#1}
\vskip 40\p@
}}
\makeatother



%---Header
\begin{document}
\chapter{foo}
\blindtext[3]
\end{document}


...wie du siehst hab ich einen unsinnigen Wert von -35 eingegeben aber leider ohne Effekt!

Ich habe, spasseshalber, auch mit "\renewcommand*\@makeschapterhead[1]" experimentiert. War aber auch nicht das Gelbe vom Ei :(

Irgendwie mag ich mich daran erinnern, dass ich was ähnliches auch schon probiert habe, aber auf keinen grünen Zweig kam...

Kannst du dir das nochmals anschauen....

Danke und Gruss!

mechanicus
09-01-2009, 08:35
Hallo,

was soll sich denn bei dir ändern? du hast kein tableofcontents-Aufruf ;)

Gruß
Marco

X-Bit
09-01-2009, 12:55
...stimmt!:D

Hier hab ich es noch mit Toc!


%----Präambel

\documentclass[paper=a4,12pt,DIV12]{scrreprt}
\usepackage[ngerman]{babel} %Trennungen, Schriftsatz; Neue deutsche Rechtschreibung
\usepackage[showframe]{geometry}
\usepackage[ansinew]{inputenc} %Dateicodierung
\usepackage[T1]{fontenc} %Umlaute, Sonderzeichen...
\usepackage[Glenn]{fncychap}
\usepackage{scrpage2}
\usepackage{blindtext}

%---TOC erstellen
\tableofcontents

%Abstand Toc oben

\makeatletter
\def\@makeschapterhead#1{%
\vspace*{-80\p@}%% Hier wird der Abstand oben verringert
{\parindent \z@ \raggedright
\normalfont
\interlinepenalty\@M
\DOTIS{#1}
\vskip 40\p@
}}
\makeatother



%---Header
\begin{document}
\chapter{foo}
\blindtext[3]
\end{document}





Funktioniert aber irgendwie trotzdem nicht:confused:

mechanicus
09-01-2009, 13:01
Hallo:

achte darauf, wo du tableofcontents aufrufst:


\begin{document}
%---TOC erstellen IM DOKUMENT
\tableofcontents
\chapter{foo}
\blindtext[3]
\end{document}
sonst weiß latex ja gar nicht wohin damit.

Gruß
Marco

X-Bit
09-01-2009, 13:29
...so kann ich lange probieren!:p

Ich habe im ersten Kommentar das ganze vervollständigt und nochmals heissen Dank an dich.

Geniales Forum hier... und, ich habe mein Manual fertig gestellt und werde gerne und bald wieder mit LaTeX arbeiten... ich frage mich, warum ich nicht früher darauf aufmerksam geworden bin, ich hätte mir nächtelanges Gefummel ersparen können!