Seite 1 von 1

while mit ifelse - bezogen auf seitenzahl

Verfasst: Mi 26. Feb 2014, 03:37
von hello_world
Hallo!
Wie schon einige wissen^^... Ich will mir ein hübsches Inhaltsverzeichnis bauen.
Es klappt ganz gut. Nur habe ich ein Problem, wenn mein Verzeichnis länger als eine Seite wird.

Es liegt folgendes vor:
-ich nutze das eso-pick packet um im Inhaltsverzeichnis mit tikz gestalten zu können.
-->die Balkenhöhen (siehe Beispielcode) passe ich "händisch" des automatischen tableofcontents an, wenn die Arbeit geschrieben ist.

Problem:
Wird das Inhaltsverzeichnis länger als eine Seite, so stellt eso-pic dort wieder das gleiche tikz Bild her. Ich will aber Farben und Balken für weitere Seiten verändern können.

Lösungsversuch:
Ich dachte, ich könnte eine while-Schleife integrieren:
1. Setze Seitenzahl auf 100 (es ist \value{page} auf 100)
2. Ich setzt nach dem Inhaltsverzeichnis die Seitenzahl auf 1

3. ich definiere in der präambel einen Befehl \inh. Da kommt rein:
3.1. eine while-Schleife für Seitennummern über 99:
\whiledo{\value{page}>99}{}{
3.2 eine if-Verzweigung in die while-Schleife:
\ifnum\value{page}=100%if zum ersten
zeichne es so
\else%else zum ersten
\ifnum\value{page}=101%if zum zweiten
zeichne es so
\else%else zum zweiten
\ifnum\value{page}=102%if zum dritten
\else Mehr Seiten habe ich nicht als Verzeichnis
\fi%Beenden drittes if
\fi%Beenden zweites if
\fi%Beenden ersets if
4. Aufrufen von \inh im Textkörper

5. Verzweifeln, weils nicht funktioniert! Fehlermeldung...



Mein Beispiel für euch. Nur eine If-Verzweigung aber selbe Fehlerausgabe:
%benutzte Packete:
\documentclass[fontsize=14pt, DIV=12,headlines=2]{scrreprt}%
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{palatino}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage[onehalfspacing]{setspace}
\setcounter{secnumdepth}{5}
\usepackage{blindtext}
\usepackage[x11names]{xcolor}
\usepackage{tikz}
\usepackage{layout}
\usepackage{eso-pic}
\usepackage{titletoc}
\usepackage{framed}
\usepackage{geometry}
\geometry{left = 3.5cm, right = 3cm,top = 2.5cm,bottom = 2.8cm}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%Einstellungen für Inhaltsverzeichnis - Chapter
\titlecontents{chapter}[-0.8cm]%
	{\addvspace{1cm}}%
		{%
		\raisebox{-0.2cm}[0cm][0cm]{\color{Snow1}\Huge\thecontentslabel}%
		\large\hspace{+0.5cm}%
		}%
			{%
			\large\hspace{0.5cm}%% <- Kapiteleinträge in \large
			}%
				{%
				\hfill\contentspage
				}%
					[%
					\titleline{\titlerule}%% <- horizontale Linie
					\addvspace{0.5cm}%% <- Abstand zum nächsten Eintrag
					]%


\newcommand{\inh}{%
	\setcounter{\value{page}}{100}	
\whiledo{\value{page}>99}{
	\ifnum\value{page}=100%
			\AddToShipoutPicture{%
				\begin{tikzpicture}[overlay]
%chapter1
				\fill[left color=black, right color=Firebrick1](1.3,23) rectangle (3.4,1.3);
				\fill[color=Firebrick3,opacity=0.2](1.3,23) rectangle (20.2,17.5);

				\end{tikzpicture}%
			}%Ende AddToShipoutPicture
		\else
			\AddToShipoutPicture{%
				\begin{tikzpicture}[overlay]
			%chapter6
				\fill[left color=black, right color=RoyalBlue4](1.3,23) rectangle (3.4,1.3);
				\fill[color=RoyalBlue4,opacity=0.2](1.3,23) rectangle (20.2,17.5);
				\end{tikzpicture}
			}
		\fi
		}%Ende whiledo
}%Ende \inh
%%%%%%%%%%%%%%%%%%%%%$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%$$$ N $$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%$$$$$$$$$$ E $ T $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%$ D  K % M $$%$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%$ O % U $$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begingroup
\newgeometry{left = 3.5cm, right = 3cm,top = 7cm, bottom = 2.8cm}
\renewcommand*{\chapterpagestyle}{empty}
\renewcommand*\contentsname{\vspace{-4.5cm}}%Die Überschrift "Inhaltsverzeichnis wird hier entfernt und durch eine Verschiebung (vertikal) ersetzt. So wird der tableofcontents in den Rahmen eingepasst (Affengeil!)
\pagestyle{empty}
\inh
\tableofcontents
\clearpage
\endgroup
\ClearShipoutPicture
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{page}{1}
\chapter{So sieht eine Kapitelseite aus, das man auch noch länger machen kann}

\section{Das wird der erste große Abschnitt in dieser Arbeit}
\subsection{Das wird die erste Subsection}
\section{zweite Section dieses Tests}
\chapter{Das ist ein Farbenspiel}
\section{hallo! ich bin bunt unterstrichten!}
\chapter{Und noch ein Chapter}
\section{ölaskdjf}
\subsection{lföaksjdfa}
\subsection{alksjdföaslkfdj}
\section{ölaskdjf}
\subsection{lföaksjdfa}
\subsection{alksjdföaslkfdj}
\section{ölaskdjf}
\subsection{lföaksjdfa}
\subsection{alksjdföaslkfdj}
\chapter{kalsdjföaslkdfjdaösldkfjaösldkfjaösldkfj}
\section{öalksdfj}
\chapter{aösldkfjasödlfkja}
\section{öalksdjf}
\subsection{öalsdkfjöasdlkfj}
\end{document}
Mag LaTex keine While-IfElse Kombi, wie sie in C o.Ä. standard ist?

Re: while mit ifelse - bezogen auf seitenzahl

Verfasst: Mi 26. Feb 2014, 08:07
von rais
hello_world hat geschrieben:
\newcommand{\inh}{%
	\setcounter{\value{page}}{100}	
\whiledo{\value{page}>99}{
	\ifnum\value{page}=100%
			\AddToShipoutPicture{%
				\begin{tikzpicture}[overlay]
%chapter1
				\fill[left color=black, right color=Firebrick1](1.3,23) rectangle (3.4,1.3);
				\fill[color=Firebrick3,opacity=0.2](1.3,23) rectangle (20.2,17.5);

				\end{tikzpicture}%
			}%Ende AddToShipoutPicture
		\else
			\AddToShipoutPicture{%
				\begin{tikzpicture}[overlay]
			%chapter6
				\fill[left color=black, right color=RoyalBlue4](1.3,23) rectangle (3.4,1.3);
				\fill[color=RoyalBlue4,opacity=0.2](1.3,23) rectangle (20.2,17.5);
				\end{tikzpicture}
			}
		\fi
		}%Ende whiledo
}%Ende \inh
wie soll hier jemals das Abbruchkriterium (\value{page} unter 100) erreicht werden?

MfG
Rainer

Verfasst: Mi 26. Feb 2014, 09:03
von Besserwisser
Ich habe zwar keine Ahnung, was Du da tatsächlich vor hast, aber wenn Du eine while-Schleife über page machen willst, dann musst Du page in der Schleife auch verändern …

Außerdem sei darauf hingewiesen, dass eso-pic bei \AddToShipoutPicture den Inhalt auf jeder Seite ausgibt, nicht nur auf der aktuellen Seite. Außerdem kennt Tikz auch einen page-node, so dass man im Zusammenhang mit Tikz eso-pic meist nicht benötigt. Aber wie gesagt: Ich habe keine Ahnung, was Du tatsächlich vor hast, weil Du uns das nämlich hier nicht erzählt hast.

Verfasst: Mi 26. Feb 2014, 09:37
von u_fischer
Du rufst deinen Befehl auf Seite 1 auf. Da kannst du soviele Whileschleifen machen, wie du willst, der Inhalt wandert nicht von alleine zu den nächsten Seiten.

Verlagere des Test auf die Seitennummer *in* den Inhalt von \AddToShipoutPicture - der wird doch auf jeder Seite ausgeführt.
\documentclass{scrreprt}%
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[x11names]{xcolor}
\usepackage{tikz}

\usepackage{eso-pic}
\AddToShipoutPicture{%
    \AtPageLowerLeft{%
    \ifcase\value{page}
       %Seite 0
      \or %seite 1
             \begin{tikzpicture}[overlay]
             \fill[left color=black, right color=Firebrick1](1.3,23) rectangle (3.4,1.3);
             \fill[color=Firebrick3,opacity=0.2](1.3,23) rectangle (20.2,17.5);
             \end{tikzpicture}%
       \or
             \begin{tikzpicture}[overlay]
             \fill[left color=black, right color=RoyalBlue4](1.3,23) rectangle (3.4,1.3);
             \fill[color=RoyalBlue4,opacity=0.2](1.3,23) rectangle (20.2,17.5);
             \end{tikzpicture}
        \or  %usw
             \begin{tikzpicture}[overlay]
             \fill[left color=black, right color=yellow](1.3,23) rectangle (3.4,1.3);
             \fill[color=RoyalBlue4,opacity=0.2](1.3,23) rectangle (20.2,17.5);
             \end{tikzpicture}
       \fi}}
       
\begin{document}


\chapter{So sieht eine Kapitelseite aus, das man auch noch länger machen kann}

\section{Das wird der erste große Abschnitt in dieser Arbeit}
\subsection{Das wird die erste Subsection}
\section{zweite Section dieses Tests}
\addtocontents{toc}{\protect\newpage}
\chapter{Das ist ein Farbenspiel}
\section{hallo! ich bin bunt unterstrichten!}
\chapter{Und noch ein Chapter}
\section{ölaskdjf}
\subsection{lföaksjdfa}
\subsection{alksjdföaslkfdj}
\section{ölaskdjf}
\subsection{lföaksjdfa}
\subsection{alksjdföaslkfdj}
\section{ölaskdjf}
\subsection{lföaksjdfa}
\subsection{alksjdföaslkfdj}
\chapter{kalsdjföaslkdfjdaösldkfjaösldkfjaösldkfj}
\section{öalksdfj}
\chapter{aösldkfjasödlfkja}
\section{öalksdjf}
\subsection{öalsdkfjöasdlkfj}
\end{document}

Verfasst: Do 27. Feb 2014, 09:26
von hello_world
@rais:
ich dachte, wenn ich das in eine Umgebung im Dokument setze, nach der \setcounter{page}{1} steht, würde es abbrechen.
@Besserwisser:
Was ich vorhabe ist, eine Inhaltsangabe zu erstellen, die einen Rahmen besitzt und in der Balken für die einzelnen Kapitel (pro Kapitel eine Farbe) am linken Rand stehen. Siehe Anhang. Es sollte alles möglichst dynamisch programmiert sein.
\AddToShipouPicture gibt es auf allen seiten aus, ja. Wenn im Dokument, nach der gewünschten Stelle, jedoch \ClearShipOutPicture aufgerufen wird ist damit Schluss. Daran hätte es also nicht gelegen.

@u_fischer:
Danke!!! Das hat geklappt und lies sich auch gut noch an meine Zwecke anpassen!!!
Die switch-case Anweisung war mit bis lang ein Rätsel in Latex... jetzt sitzt auch die :D Danke



Die PDF im Anhang ist natürlich nicht das Endlayout. Es gibt noch einiges anzupassen, von Schrift, bis hin zum fragwürdigen Chapterstyle. Aber im großen und ganzen steht es :D

Verfasst: Do 27. Feb 2014, 09:28
von Johannes_B
Dateianhänge sind momentan nicht möglich, du musst also extern verlinken

Verfasst: Do 27. Feb 2014, 09:35
von hello_world
https://www.dropbox.com/s/eqlfw6drzjm7p ... 0Stand.pdf


Es gibt Vorschriften, wie das Universitätsloge der Uni Augsburg zu platzieren ist. Im vorliegenden Fall sei darauf hingewiesen, dass dies nicht die offiziele Verwendung ist!

Verfasst: Do 27. Feb 2014, 09:39
von hello_world
Einmal zu wenig kompiliert.... Beim Daumenindexübersichtsding sind die Übergänge normalerweise fließend, die Kästen sind nach dem 2. mal kompilieren weg.