lstnewenvironment Prob mit Verzeich.Strukt. und pdf-Links

Inhalt, Abbildungen, Tabellen, Quellcodes und andere Verzeichnisse


Sörensen
Forum-Anfänger
Forum-Anfänger
Beiträge: 12
Registriert: Sa 20. Nov 2010, 16:08

lstnewenvironment Prob mit Verzeich.Strukt. und pdf-Links

Beitrag von Sörensen »

Hallo zusammen,
ich habe ein Neues Thema aufgemacht, da sich die Thematik weg vom ursprünglichen Titel verlagert hat.
Der alte Thread ist:
http://www.golatex.de/viewtopic,p,40945.html#40945

Aktuell erstelle ich mehrere eigene Listingumgebungen, da ich C-Code und Bash-Code getrennt voneinander behandeln möchte. Leider kann ich bis jetzt nur ein Verzeichnis erstellen. Wie kann ich zwei, nach Codesorte unterscheidende Verzeichnisse erstellen?

Das zweite Problem ist die Nummerierung. Da ich chapter.code verwende, werden die Linknummern doppelt vergeben. Zum Beispiel 1.1 einmal für den ersten C-Code und einmal für den ersten Bash-Code im ersten Kapitel. Damit gehen die Verlinkungen schief. Wie kann man es einrichten, dass die Verlinkungen wieder eineindeutig behandelt werden?

"Kurzes Minimalbeispiel"
\listfiles
% Einstellen der Dokumentenklasse mit wichtigen Parametern
\documentclass[
12pt,							% Standartschriftgr��e 12pt
a4paper,					% Format A4
twoside,					% Zweiseitig
ngerman,					% Neue deutsche Rechtschreibung
headsepline=on,		% Einschalten der Kopfzeilentrennlinie (scheint nur angezeigt, wenn es eine Kopfzeile gibt.)
footsepline=on,		% Einschalten der Fu�zeilentrennlinie
plainfootsepline	% F�gt dem Seitenstill plain eine footsepline hinzu. (F�r Kapitelanfangsseiten.) Ben�tigt \usepackage [automark]{scrpage2} und den \pagestyle{scrheadings}
]{scrreprt}				% Dokumentenklasse

\usepackage{float}
\usepackage{listings}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[pdftex, demo]{graphicx}
\usepackage{pdfpages}
\usepackage[hyperfootnotes=false,colorlinks=true,linkcolor=black,citecolor=black,urlcolor=darkblue]{hyperref}
\usepackage{cite}
\usepackage[automark]{scrpage2}
\usepackage{setspace}
\onehalfspacing
\usepackage{blindtext}  

\pagestyle{scrheadings}		%Ben�tigt \usepackage [automark]{scrpage2}
\setheadsepline{1pt}
\setfootsepline{1pt}
\setlength{\textheight}{21cm}

%Um Beispielbilder einzufügen
\newcommand\bild[2]
{
\captionsetup{type=figure}
\fbox{\includegraphics[width=10cm,height=4cm]{plank}}
\caption{#1}
\label{#2}
}

%Um Beispielbilder einzufügen
\newcommand\tab[2]
{
\begin{table}[h!]
	\fbox{
		\begin{tabular}{ll}
	  	\textbf{Üb1}	& \textbf{Üb2}\\
	  	Text1					&	Text2\\
	  	Text3					&	Text4\\
	  	Text5					&	Text6\\
		\end{tabular}
	}
	\caption{#1}
	\label{#2}
\end{table}
}

%Zur Gestalltung der Captions
\usepackage[format=plain,indention=1cm,font=sf ,labelfont=bf, nooneline]{caption} 
\renewcommand{\captionfont}{\sffamily \slshape} 
\renewcommand{\captionlabelfont}{ \sffamily \slshape \bfseries   } 
\renewcommand{\thefigure}{\arabic{chapter}.\arabic{figure}}	% Durchnummerierung der Abbildungen im Gesamtdokument
\renewcommand{\thetable}{\arabic{chapter}.\arabic{table}}	% Durchnummerierung der Tabellen im Gesamtdokument

\newcounter{oldlstlisting}
\newcounter{ccodecounter}[chapter]
\newcounter{bashcodecounter}[chapter]

\makeatletter
\lstnewenvironment{ccode}[2]{
  \renewcommand\lstlistingname{C-Quellcode}
  \setcounter{oldlstlisting}{\value{lstlisting}}
  \setcounter{lstlisting}{\value{ccodecounter}}
  \lstset{
  	frame=tlbr,
		xleftmargin=15mm,
		framexleftmargin=15mm,
		numbersep=5mm,
		numbers=left,
		stepnumber=5,
		firstnumber=1,
		captionpos=b,
		tabsize=4,
		breaklines=true,
		#1
	}
}{
    \stepcounter{ccodecounter}
    \setcounter{lstlisting}{\value{oldlstlisting}}
}

\lstnewenvironment{bashcode}[2]{
	\renewcommand\lstlistingname{Bash-Quellcode}
	\setcounter{oldlstlisting}{\value{lstlisting}}
	\setcounter{lstlisting}{\value{bashcodecounter}}
	\lstset{
		language=Bash,
		frame=tlbr,
		xleftmargin=15mm,
		framexleftmargin=15mm,
		numbersep=5mm,
		numbers=left,
		stepnumber=5,
		firstnumber=1,
		captionpos=b,
		tabsize=4,
		breaklines=true,
		#1
	}
}{
    \stepcounter{bashcodecounter}
    \setcounter{lstlisting}{\value{oldlstlisting}}
}
\makeatother

%%%%BEGIN%%%%
\begin{document}

\cleardoublepage
\pdfbookmark[0]{\contentsname}{toc}
\tableofcontents

\cleardoublepage
\pdfbookmark[0]{\listfigurename}{lof}
\listoffigures

\cleardoublepage
\pdfbookmark[0]{\listtablename}{lot}
\listoftables

\cleardoublepage
\pdfbookmark[0]{Quellcodeverzeichnis}{loc}
\lstlistoflistings

\cleardoublepage
\chapter{Kapitel1} \label{chap:kap1}
\bild{plank1}{pic:plank1}
\tab{tab1}{tab:tab1}

\begin{ccode} {caption=prog1, label=ccode:prog1, stepnumber=1}
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
\end{ccode}

\blindtext
\blindtext
\blindtext
\blindtext

\begin{bashcode} {caption=prog1, label=bashcode:prog1, stepnumber=1}
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
\end{bashcode}

Die Referenz auf den Bashcode 1 in Kapitel \ref{chap:kap1} verweist auf \ref{bashcode:prog1}.

Die Referenz auf den Bashcode 2 in Kapitel \ref{chap:kap2} verweist auf \ref{bashcode:prog2}.

Die Referenz auf den Bashcode 3 in Kapitel \ref{chap:kap2} verweist auf \ref{bashcode:prog3}.
\newline

Die Referenz auf den C Code 1 in Kapitel \ref{chap:kap1} verweist auf \ref{ccode:prog1}.

Die Referenz auf den C Code 2 in Kapitel \ref{chap:kap2} verweist auf \ref{ccode:prog2}.

Die Referenz auf den C Code 3 in Kapitel \ref{chap:kap2} verweist auf \ref{ccode:prog3}.

\blindtext
 
\cleardoublepage
\chapter{Kapitel2}	\label{chap:kap2}
\bild{plank2}{pic:plank2}
\tab{tab2}{tab:tab2}

\begin{ccode} {caption=prog2, label=ccode:prog2}
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
\end{ccode}

\blindtext
\blindtext
\blindtext
\blindtext

\begin{bashcode} {caption=prog2, label=bashcode:prog2, stepnumber=1}
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
\end{bashcode}

Die Referenz auf den Bashcode 1 in Kapitel \ref{chap:kap1} verweist auf \ref{bashcode:prog1}.

Die Referenz auf den Bashcode 2 in Kapitel \ref{chap:kap2} verweist auf \ref{bashcode:prog2}.

Die Referenz auf den Bashcode 3 in Kapitel \ref{chap:kap2} verweist auf \ref{bashcode:prog3}.
\newline

Die Referenz auf den C Code 1 in Kapitel \ref{chap:kap1} verweist auf \ref{ccode:prog1}.

Die Referenz auf den C Code 2 in Kapitel \ref{chap:kap2} verweist auf \ref{ccode:prog2}.

Die Referenz auf den C Code 3 in Kapitel \ref{chap:kap2} verweist auf \ref{ccode:prog3}.

\blindtext

\begin{ccode} {caption=prog3, label=ccode:prog3, stepnumber=1}
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
\end{ccode}

\blindtext
\blindtext
\blindtext
\blindtext

\begin{bashcode} {caption=prog3, label=bashcode:prog3, stepnumber=1}
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
\end{bashcode}

\end{document}
Hoffe es kann mir jemand weiterhelfen...
Grüße,
Sören