PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seltsames Section-Verhalten nach Anpassung der article.cls



Stoppl11
27-08-2007, 12:54
Hallo zusammen,

Ich bin erst vor kurzem in die Latex-Welt eingestiegen und habe jetzt ein Problem das ich nicht lösen kann:

Ich habe Latex-Templates entworfen (von article abgeleitet). Nun musste ich doch Überschrifthierarchien bis Level 8 unterstützen und habe deshalb die article.cls angepasst: Habe einfach die counter und commands für subsection bzw. subsubsection kopiert und meine neuen Levels eingefügt.

Das funktioniert auch so weit. Die Sektionen werden auf korrektem Level angezeigt und nummeriert. PROBLEM: die Sektionsüberschrift wird im Body des Ebschnitts nocheinmal widerholt! Warum ist das so und wie kann man das ändern?

Muster:

\subsubsubsection{Überschrift}
restlicher Body-Text

erzeugt:

1.1.1.1 Überschrift
Überschrift :confused:
restlicher Body-Text

Kann mir hier wer helfen?
Wäre wirklich dankbar.

Grüße,
Stefan


Details - anpassungen in article.cls:

\newcounter {subsubsubsection}[subsubsection]
\renewcommand \thesubsubsubsection{\thesubsubsection .\@arabic\c@subsubsubsection}
\newcommand\subsubsubsection{\@startsection{subsub subsection}{4}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\large\bfseries}}
\newcommand*\l@subsubsubsection{\@dottedtocline{4} {3.8em}{3.2em}}

Stoppl11
28-08-2007, 08:26
Hallo nochmal,

Ich habe jetzt etwas herumprobiert und der Fehler liegt definitiv nur am geschriebenen Code und nicht an der article.cls.

Anstatt die article.cls zu verändern habe ich jetzt ein eigenes file erzeugt (myheadings.sty) und das eingebunden - mit dem gleichen Ergebnis.

Code in myheadings.sty:

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{myheadings}[2007/08/28]

\newcounter {subsubsubsection}[subsubsection]
\newcounter {subXsection}[subsubsubsection]
\newcounter {subXsubsection}[subXsection]
\newcounter {subXsubsubsection}[subXsubsection]
\renewcommand \thesubsubsubsection{\thesubsubsection .\@arabic\c@subsubsubsection}
\renewcommand \thesubXsection{\thesubsubsubsection .\@arabic\c@subXsection}
\renewcommand \thesubXsubsection{\thesubXsection .\@arabic\c@subXsubsection}
\renewcommand \thesubXsubsubsection{\thesubXsubsection .\@arabic\c@subXsubsubsection}
\newcommand\subsubsubsection{\@startsection{subsub subsection}{4}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\large\bfseries}}
\newcommand\subXsection{\@startsection{subXsection }{5}{\z@}%
{-2.25ex\@plus -1ex \@minus -.2ex}%
{1.0ex \@plus .2ex}%
{\normalfont\large\bfseries}}
\newcommand\subXsubsection{\@startsection{subXsubs ection}{6}{\z@}%
{-2.25ex\@plus -1ex \@minus -.2ex}%
{1.0ex \@plus .2ex}%
{\normalfont\normalsize\bfseries}}
\newcommand\subXsubsubsection{\@startsection{subXs ubsubsection}{7}{\z@}%
{-2.25ex\@plus -1ex \@minus -.2ex}%
{1.0ex \@plus .2ex}%
{\normalfont\normalsize}}

Dieser Code erzeugt immer:

1.1.1.1 Überschrift
Überschrift
Body

1.1.1.1.1 Überschrift
Überschrift
Body

...u.s.w.

Wieso erzeugt der obige code dieses Verhalten? Wie kann man das Wiederholen der Überschrift abstellen?
Danke für jegliche Hilfe!

Stefan

sommerfee
28-08-2007, 10:23
Hallo Stefan,

Du hast vergessen, die passenden "mark"-Befehle zu definieren. Sind sie nicht vorhanden, so werden sie intern in \@startsection als \relax interpretiert, was zur Folge hat, daß das Argument ausgegeben anstatt ausgewertet wird - was deine doppelte Ausgabe erklärt.

Hast du dir schon'mal ftp://ftp.dante.de/tex-archive/macros/latex/base/classes.dtx angeschaut? In diesem Dokument sind die Zusammenhänge dargelegt. Auch ftp://ftp.dante.de/tex-archive/macros/latex/doc/clsguide.pdf dürfte für dich interessant sein.

Auch kannst du dich wegen \subsubsubsection etc. an \paragraph und \subparagraph orientieren, die ja im Prinzip das gleiche in grün sind, also immerhin 2 weitere Gliederungsebenen bereitstellen.

Liebe Grüße,
Axel

Stoppl11
28-08-2007, 12:55
Erst Mal danke für Antwort!

Habe mir jetzt die classes.dtx Mal angesehen. Ins Auge gestochen sind dabei vor allem 2 Stellen:
Die Definitionen von sectionmark und subsectionmark (\def\subsectionmark##1 etc.)
Der Verweis auf die latex.dtx für die \subsubsection{Mark commands} (in einem macro: \newcommand*\subsectionmark[1]{} etc.)

Außerdem gibt es @gobble commands und in article.cls kommen auch marks für section und subsection vor.

Ich bin mir leider nicht im Klaren wo ich ansetzen soll. Wo soll die markdefinition hin, wie sieht sie aus und wie wird sie mit den neu definierten Kapiteln verbunden?

sorry falls ich zu sehr auf der Leitung stehe...

P.S. paragraph und subparagraph mit Kapitelnummern zu versehen habe ich auch schon versucht, allerdings brauche ich dann doch noch mehr Unterebenen...

sommerfee
28-08-2007, 13:23
Hallo Stefan,



Ich bin mir leider nicht im Klaren wo ich ansetzen soll. Wo soll die markdefinition hin, wie sieht sie aus und wie wird sie mit den neu definierten Kapiteln verbunden?

Definiere einfach \subsubsubsectionmark analog zu \subsubsectionmark aus classes.dtx/article.cls etc. Diese Makros werden automatisch von \@startsection verwendet, so führt z.B.

\@startsection{subsubsubsection}...
dazu, daß intern \subsubsubsectionmark verwendet wird. Wenn es nicht definiert ist, kommt es zu dem von dir beobachteten Fehlverhalten, also brauchst du einfach für jedes \@startsection{xxx} auch einen \xxxmark-Befehl.

Eine Art "Verbindung" brauchst du also nicht herzustellen, die ist schon in \@startsection eingebaut.

Was mir in dem Zusammenhang gerade einfällt: Vielleicht ist auch der Zähler "secnumdepth" für dich von Interesse, der gibt AFAIK vor, bis zu welcher Ebene durchnummeriert wird.

Liebe Grüße,
Axel

Stoppl11
29-08-2007, 09:28
Danke danke danke für die Antworten! Das waren die entscheidenden Hinweise (auf mark wäre ich nie gekommen)...

Hab das jetzt hinbekommen. Aus einem anderen Thema heraus habe ich übrigens auch im Internet eine Musterlösung für Gliederungsebenen unter subparagraph gefunden :o:


\usepackage{alnumsec}
\makeatletter \let\size@abschnitt\normalsize
\newcounter{abschnitt}[subparagraph]
\newcommand\abschnitt{\@startsection{abschnitt}{6} {\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
{-1em}%
{\setlength{\parfillskip}{\z@ \@plus 1fil}%
\raggedsection\normalfont\sectfont\nobreak\size@ab schnitt\nobreak}}
\newcommand*{\scr@fnt@abschnitt}{\size@abschnitt}
\newcommand*\l@abschnitt{\@dottedtocline{5}{10em}{ 5em}}
\let\abschnittmark\@gobble
\makeatother
\alnumsectionlevels{1}{section,subsection,subsubse ction,paragraph,subparagraph,abschnitt}
\alnumsecstyle{Rnldng

sommerfee
29-08-2007, 10:31
Hallo Stefan,

Schön, daß es jetzt klappt! :)

Hierzu eine Frage:



\newcommand*{\scr@fnt@abschnitt}{\size@abschnitt}

Weißt du, wozu das gut sein soll? "scr@" hört sich verdächtig nach KOMA-Script an, ich würde daher naiv denken, dies sei dafür da, daß man auch \setkomafont{abschnitt} bzw. \addtokomafont{abschnitt} benutzen kann (habe das jetzt aber nicht nachgeschaut :rolleyes: ), aber was nützt das, wenn innerhalb von abschnitt dann \size@abschnitt und nicht \scr@fnt@abschnitt zur Anwendung kommt? :confused:

Gruß,
Axel