PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : renewcommand von section*???



procrash
27-03-2008, 14:03
Hallo, wie kann ich erreichen das bei sections die nicht im Inhaltsverzeichnis aufgeführt werden eine ausgefüllte Box vorangestellt wird?

Ich dachte mir das müsste so gehen, geht aber nicht:

\renewcommand{\section*}[1]
{
\Box
\section*{#1}
}

Stefan_K
27-03-2008, 14:42
Hallo,

ganz so einfach ist es nicht. Du kannst nicht das redefinierte Makro innerhalb seiner eigenen Definition aufrufen.
Schau Dir einmal die \section-Definition im Quellcode Deiner Dokumentklasse (welche ist das?) an, das unterscheidet sich nämlich in verschiedenen Klassen. Der * sollte darin nicht behandelt werden, sondern im aufgerufenen \@startsection. Hierin steht standardmäßig die Abfrage nach dem * mit \@ifstar. Da könnte man sich einklinken. Die Definition von \@startsection findest Du ebenfalls in Deiner Dokumentklasse und wenn nicht dort, dann in latex.ltx.

Viele Grüße,

Stefan

procrash
27-03-2008, 17:49
Hallo Stefan,

ich benutze die scrreprt Klasse als Vorgabe.

Jetzt hab ich mir die scrreprt.cls mal genauer angesehen. Das einzige was ich zu deiner oben genannten Aussage finden kann ist das hier:

\newcommand*{\@saddsec}[1]{\section*{#1}\@mkboth{}{}}
\newcommand\section{\@startsection{section}{1}{\z@ }%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\raggedsection\normalfont\sectfont\nobreak\size@s ection\nobreak}%
}

@ifstar kommt da leider nicht vor. Muss ich mir den Quellcode jetzt genauer ansehen und dann in meinem Dokument so redefinieren, dass ich bei ifstar unter der Section einsetze das da ne Box vor dem Text steht???

Ich hab auch noch gleich in der latex.ltx nachgeschaut und das hier gefunden:
\def\@startsection#1#2#3#4#5#6{%
\if@noskipsec \leavevmode \fi
\par
\@tempskipa #4\relax
\@afterindenttrue
\ifdim \@tempskipa <\z@
\@tempskipa -\@tempskipa \@afterindentfalse
\fi
\if@nobreak
\everypar{}%
\else
\addpenalty\@secpenalty\addvspace\@tempskipa
\fi
\@ifstar
{\@ssect{#3}{#4}{#5}{#6}}%
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}

Aber was muss ich jetzt tun um das ganze zu realisieren. Die Änderungen sollen ja nur lokal in meinem einen Dokument erfolgen???

Wo könnte sich das ganze noch verstecken???

Grüße

Wolfgang

Stefan_K
27-03-2008, 17:59
Hallo Wolfgang,

in latex.ltx ist \@startsection so definiert:
\def\@startsection#1#2#3#4#5#6{%
\if@noskipsec \leavevmode \fi
\par
\@tempskipa #4\relax
\@afterindenttrue
\ifdim \@tempskipa <\z@
\@tempskipa -\@tempskipa \@afterindentfalse
\fi
\if@nobreak
\everypar{}%
\else
\addpenalty\@secpenalty\addvspace\@tempskipa
\fi
\@ifstar
{\@ssect{#3}{#4}{#5}{#6}}%
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}

Hier findet sich das \@ifstar, und an der Stelle könnte man ändern. Ganz pauschal für alle Gliederungsebenen geht es ohne weitere Abfrage mit dieser Redefinition in der Präambel:
\makeatletter
\renewcommand\@startsection[6]{%
\if@noskipsec \leavevmode \fi
\par
\@tempskipa #4\relax
\@afterindenttrue
\ifdim \@tempskipa <\z@
\@tempskipa -\@tempskipa \@afterindentfalse
\fi
\if@nobreak
\everypar{}%
\else
\addpenalty\@secpenalty\addvspace\@tempskipa
\fi
\@ifstar
{\Bar\@ssect{#3}{#4}{#5}{#6}}%
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
\makeatother

Stefan

procrash
27-03-2008, 19:26
Hallo Stefan,

vielen dank für deine Mühe. Hat einwandfrei funktioniert. \Box musste ich zwar noch in ein \rule abändern aber ansonsten hats einwandfrei geklappt.