PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \thesection mit tikz ändern



rafael
02-01-2012, 11:39
Ich möchte gern die Ausgabe der section Nummerierung ändern. Leider verschluckt sich dies bei der Verwendung von tikz.
Gibt es da eine Lösung?


\documentclass{scrartcl}
\usepackage{tikz,xcolor}

\begin{document}
\section{normal}

%Test
\renewcommand{\thesection}{\alph{section}--}
\section{ver\"andert ohne tikz}

\renewcommand{\thesection}{\tikz\node[fill=gray]{\alph{section}};}
\section{ver\"andert mit tikz}
\end{document}

u_fischer
02-01-2012, 12:54
Nun, \thesection "wandert" also darf es keine zerbrechlichen Befehle enthalten. Du kannst die mit \protect schützen, aber ich habe gewisse Zweifel, dass du wirklich den tikz-Code an den Stellen haben willst, wo er dann auftaucht:


\documentclass{scrartcl}
\usepackage{tikz,xcolor}

\pagestyle{headings}
\begin{document}
\tableofcontents

\section{normal}

%Test
\renewcommand{\thesection}{\alph{section}--}
\section{ver\"andert ohne tikz}


\renewcommand\thesection{\protect\tikz\protect\nod e[fill=gray]{\alph{section}};}
\section{ver\"andert mit tikz}\label{sec}
This ist aus section \ref{sec}.
\newpage
neue seite
\end{document}


Wenn du alle Überschriften (also auch \subsection usw) ändern willst, kannst du \@seccntformat umdefinieren. Wenn du nur das Verhalten von \section ändern willst, musst du den \section-Befehl umdefinieren.

rafael
02-01-2012, 14:21
Funktioniert, aber deine Bedenken sind natürlich berechtigt.

Eigentlich hatte ich so etwas vor:


\documentclass{scrartcl}
\usepackage{tikz,xcolor}

\makeatletter
\setcounter{secnumdepth}{7}
\newcounter{newtask}
\newcommand\newtask{%Formatierung
\@startsection{newtask}%name
{6}%level
{\z@}%indent (no indent)
{1.75ex \@plus1ex \@minus.2ex}%beforeskip
{.2ex \@plus .2ex}%afterskip
{\normalfont\normalsize\rmfamily\mdseries\upshape} %style
}
\makeatother
\renewcommand\thenewtask{\protect\tikz\protect\nod e[fill=gray]{\arabic{newtask}};}

\pagestyle{headings}

\begin{document}
\newtask{Eine Aufgabe}

\end{document}

aber da klappt es wieder nicht (warum auch immer)

u_fischer
02-01-2012, 15:04
scrartcl verändert die Mark-Befehle. Deine neuer Befehl tut das nicht. Du kannst es mit zusätlichen Klammern versuchen:


\renewcommand\thenewtask{{\protect\tikz\protect\no de[fill=gray]{\arabic{newtask}};}}

Aber grundsätzlich ist es einfach nicht richtig, die \thecounter-Befehle so zu verändern. Die werden an so vielen Stellen verwendet (und sie müssen oft expandierbar sein), dass es einfach gefährlich ist, komplizierten tikz-code dort hinzuzufügen. Wenn du bei deinem \newtask kein optionales Argument brauchst, würde ich eher sowas machen:


\documentclass{scrartcl}
\usepackage{tikz,xcolor}

\makeatletter
\setcounter{secnumdepth}{7}
\newcounter{newtask}

\newcommand\newtask[1]{%Formatierung
\begingroup
\renewcommand\@seccntformat[1]{\protect\tikz\protect\node[fill=gray]{\csname the##1\endcsname};}
\@startsection{newtask}%name
{6}%level
{\z@}%indent (no indent)
{1.75ex \@plus1ex \@minus.2ex}%beforeskip
{.2ex \@plus .2ex}%afterskip
{\normalfont\normalsize\rmfamily\mdseries\upshape} {#1}%style
\endgroup
}
\makeatother

\pagestyle{headings}

\begin{document}

\newtask{Eine Aufgabe}

\newtask{Eine Aufgabe}
\end{document}

rafael
02-01-2012, 15:46
\newcommand\newtask[1]{%Formatierung
\begingroup
\renewcommand\@seccntformat[1]{\protect\tikz\protect\node[fill=gray]{\csname the##1\endcsname};}
\@startsection{newtask}%name
{6}%level
{\z@}%indent (no indent)
{1.75ex \@plus1ex \@minus.2ex}%beforeskip
{.2ex \@plus .2ex}%afterskip
{\normalfont\normalsize\rmfamily\mdseries\upshape} {#1}%style
\endgroup
}


Ja, das Makro werde ich nehmen, da ich für die \newtask sowieso ein neues Verzeichnis mit vom Titel abweichenden Informationen anlege.

Vielen Dank, jetzt klappt es fast: Warum werden nun die Titel eigentlich doppelt ausgegeben?

u_fischer
02-01-2012, 16:36
Warum werden nun die Titel eigentlich doppelt ausgegeben?

Weil der zugehörige \mark-Befehl noch nicht definiert ist. Z.B.


\newcommand\newtaskmark[1]{}

rafael
02-01-2012, 18:14
was für eine komplizierte Welt.

Danke für deine Geduld Ulrike

Rafael