Anzeige:
Ergebnis 1 bis 7 von 7

Thema: \thesection mit tikz ändern

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.07.2008
    Ort
    Dresden
    Beiträge
    136

    \thesection mit tikz ändern

    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?
    Code:
    \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}

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    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:

    Code:
    \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\node[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.

  3. #3
    Registrierter Benutzer
    Registriert seit
    26.07.2008
    Ort
    Dresden
    Beiträge
    136
    Funktioniert, aber deine Bedenken sind natürlich berechtigt.

    Eigentlich hatte ich so etwas vor:

    Code:
    \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\node[fill=gray]{\arabic{newtask}};}
    
    \pagestyle{headings}
    
    \begin{document}
    \newtask{Eine Aufgabe}
    
    \end{document}
    aber da klappt es wieder nicht (warum auch immer)

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    scrartcl verändert die Mark-Befehle. Deine neuer Befehl tut das nicht. Du kannst es mit zusätlichen Klammern versuchen:

    Code:
    \renewcommand\thenewtask{{\protect\tikz\protect\node[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:

    Code:
    \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}
    Geändert von u_fischer (02-01-2012 um 15:18 Uhr)

  5. #5
    Registrierter Benutzer
    Registriert seit
    26.07.2008
    Ort
    Dresden
    Beiträge
    136
    Zitat Zitat von u_fischer Beitrag anzeigen
    Code:
    \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?

  6. #6
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Warum werden nun die Titel eigentlich doppelt ausgegeben?
    Weil der zugehörige \mark-Befehl noch nicht definiert ist. Z.B.

    Code:
    \newcommand\newtaskmark[1]{}

  7. #7
    Registrierter Benutzer
    Registriert seit
    26.07.2008
    Ort
    Dresden
    Beiträge
    136
    was für eine komplizierte Welt.

    Danke für deine Geduld Ulrike

    Rafael

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •