mehrere eigenen Verzeichnisse mit float

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

mehrere eigenen Verzeichnisse mit float

Beitrag von Sörensen »

Hallo zusammen,
ich habe versucht ein Minimalbeispiel zu erzeugen, an dem die Herausforderungen, an dennen ich aktuell noch scheitere sichtbar werden.

In meinem Dokument werden neben Inhalts-, Abbildungs- und Tabellenverzeichnis weitere Verzeichnisse benötigt. Fürs Beispiel habe ich mich auf C-Quellcode und Bash-Quellcode beschränkt. Im Dokument werden noch weitere Verzeichnisse nötig... (XML, Kernelkonfigurationen, ...)

Bis jetzt habe ich mit dem Paket listings gearbeitet, dessen Nachteil ist, dass nur ein Verzeichnis erstellt werden kann, in dem alle "eigenen" Verzeichnisse enthalten sind. Das möchte ich nicht.

Um mehrere Verzeichnisse anzulegen habe ich nun mit dem Paket float herumexperimentiert. Klarer Vorteil ist, dass die Verzeichnisse getrennt aufgelistet werden können. Leider stolpere ich über zwei Punkte, die ich bis jetzt nicht gelöst bekommen habe.
  • - Der Nummerierungsstil soll für alle Verzeichnisse dokumentweit identisch sein. {Chapter}.{Counter_desKapitels} (siehe Abb. und Tab.)
    - Listing ermöglicht bei längeren Codeausschnitten einen automatischen Seitenumbruch. Wenn man diese nun in die float-Umgebung pakt, geht das offensichtlich nicht mehr. Gibt es für dieses Problem überhaupt eine Lösung? (Mit verbatim dürfte sich das Problem nicht ändern. Oder ich hatte auch da die falschen Einstellungen...)
Danke für eure Hilfe!
Sören
\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

%Versuch mit float
\floatstyle{plain}
\newfloat{ccode}{ht}{floc}
\floatname{ccode}{C Quellcode}

\floatstyle{plain}
\newfloat{bashcode}{ht}{flob}
\floatname{bashcode}{Bash Quellcode}

\floatstyle{plain}
\newfloat{xmlcode}{ht}{flox}
\floatname{xmlcode}{XML Quellcode}

\lstdefinestyle{C}
{
frame=tlbr,
xleftmargin=15mm,
framexleftmargin=15mm,
numbersep=5mm,
numbers=left,
stepnumber=5,
firstnumber=1,
captionpos=b,
tabsize=4,
breaklines=true
}

\lstdefinestyle{Bash}
{
frame=tlbr,
xleftmargin=15mm,
framexleftmargin=15mm,
numbersep=5mm,
numbers=left,
stepnumber=5,
firstnumber=1,
captionpos=b,
tabsize=4,
breaklines=true
}

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

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

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

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

\cleardoublepage
\pdfbookmark[0]{C Quellcodeverzeichnis}{loc}
\listof{ccode}{C Quellcodeverzeichnis}

\cleardoublepage
\pdfbookmark[0]{Bash Quellcodeverzeichnis}{lob}
\listof{bashcode}{Bash Quellcodeverzeichnis}

\cleardoublepage
\pdfbookmark[0]{XML Quellcodeverzeichnis}{lox}
\listof{xmlcode}{XML Quellcodeverzeichnis}

\cleardoublepage
\chapter{Kapitel1} \label{chap:kap1}
\bild{plank1}{pic:plank1}
\tab{tab1}{tab:tab1}
 
\begin{ccode}
	\begin{lstlisting} [language=C, style=C, stepnumber=1]
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
	\end{lstlisting}  \caption{prog1}
  \label{ccode:prog1}
\end{ccode}

\begin{bashcode}
	\begin{lstlisting} [style=Bash]
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
	\end{lstlisting}
	\caption{prog1}
  \label{bashcode:prog1}
\end{bashcode}

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

\begin{ccode}
	\begin{lstlisting} [language=C, style=C]
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{lstlisting}
  \caption{prog2}
  \label{ccode:prog2}
\end{ccode}

\begin{bashcode}
	\begin{lstlisting} [style=Bash]
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
BashSkript
	\end{lstlisting}
	\caption{prog2}
  \label{bashcode:prog2}
\end{bashcode}

\blindtext

\end{document}


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

Beitrag von Sörensen »

Hallo,
nachdem ich nun mal ein paar Tage investiert habe, habe ich zwei mögliche Vorgehensweisen gefunden.

1. Eine ziemlich gepfuschte Lösung...
...
\floatstyle{plain}
\newfloat{ccode}{ht}{floc}[chapter]
\floatname{ccode}{C Quellcode}
\newcounter{ccodecounter}[chapter]
\setcounter{ccodecounter}{0}
...
\renewcommand*\lstlistingname{C-Quellcode}
\setcounter{lstlisting}{\value{ccodecounter}}
\stepcounter{ccodecounter}
\lstset{caption={prog1}}
\begin{lstlisting} [language=C, style=C, stepnumber=1]
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
C-Code
\end{lstlisting}

\begin{ccode}
	\captionlistentry{prog1}
	\label{ccode:prog1}
\end{ccode}
...
Damit ist es möglich getrennte Verzeichnisse aufzubauen. Im Dokument wird die Listing-Umgebung genutzt und für die Verzeichnisse die float-Umgebung.
Für nur gedruckte Versionen bekomme ich damit genau das was, ich brauche.
Für die pdf habe ich das Problem, dass die Verlinkungen nicht passen. Ist auch klar, da keine eindeutige Zuordnung mehr möglich ist, da die gleiche Listing-Nummer mehrfach verwendet wird.

2. Dann habe ich rausbekommen, dass man sich auch eigene listing-Umgebungen definieren kann, was wohl die deutlich schönere Lösung ist.
...
\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
...
\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}
...
Leider habe ich noch nicht herausgefunden, wie man bei den eigenen Listing-Umgebungen getrennte Verzeichnisse (C-Quellcodeverzeichnis, Bash-Quellcodeverzeichnis) erstellen kann. Bis jetzt werden alle Quellcodes in einem Verzeichnis aufgelistet. Kann mir da jemand helfen?

Ebenso passen die Verlinkungen nicht. Eine google.de-Lösung ist den listing-Counter zu sichern. Das funktioniert aber nicht, da der gesicherte Counter schließlich nur hochgezählt, aber nicht verwendet wird.

Da es jetzt nichts mehr mit float zu tun hat, werde ich ein neues Thema aufmachen und dieses anschließend schließen...

Ich hoffe, dass mir noch jemand helfen kann...

Grüße,
Sören

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

Beitrag von Sörensen »

Und das Neue Thema ist unter

http://www.golatex.de/viewtopic,p,40950.html#40950

zu finden...

Antworten