Seite 1 von 1

Programmcode einbinden

Verfasst: Do 13. Aug 2009, 11:01
von Bastian
Hallo zusammen!

Ich möchte ein paar Zeilen Programmcode in meiner Arbeit anzeigen. Habe dazu hier schon einiges gefunden, so das ich zu folgendem Minimalbeispiel komme:
\documentclass[12pt,a4paper]{scrreprt}

\usepackage{float}
\floatstyle{ruled}
\newfloat{program}{h}{lop}[chapter]
\floatname{program}{Kode}

\begin{document}

\chapter{Kapitel1}

Hier etwas Kode \ref{prog:01}.

\begin{program} 
\begin{verbatim}
function D_FZVr1 = fcn(D_FZV0,a_xo,k_Er)

if (a_xo > 0)
    D_FZVr1=1;  % Extrem schlauer Kommentar

else
    D_FZVr1=-1; % nicht weniger schlauer Kommentar

end;
\end{verbatim}
\caption{Etwas Programcode}
\label{prog:01}
\end{program}

\end{document}
Jetzt wünsche ich mir noch, dass die Kommentare (hintern dem %-Zeichen) auch als solche gekennzeichnet sind, z.B. in einer anderen Farbe. Bei "if" und "else" wäre eine Farbe auch ganz schick, geht das?

Zudem würde ich gern die Zeilen nummerieren, um mich im Text einfacher darauf zu beziehen. Gibt es dafür einen einfachen Weg?

Und zu guter letzt, etwas was im Beispiel nicht erkennbar ist:
Ich verwende das float Paket erst jetzt für den Programmcode. Seit ich es eingefügt habe, bekomme ich zu jeder Abbildung eine Warnung:
l.42
pdfTeX warning (ext4): destination with the same identifier (name{figure.1
.1}) has been already used, duplicate ignored

\AtBegShi@Output ...ipout \box \AtBeginShipoutBox
Hängt das eventuell mit [liststotoc] zusammen? Bin für Anregungen dankbar...


Danke für eure Hilfe! Denke ich muss und werde dieses Forum im Vorwort meiner DA erwähnen :-)

Verfasst: Do 13. Aug 2009, 15:47
von bloodworks
Warum nimmst du nicht das Listings Paket?
Das kann alles was du willstftp://ftp.tex.ac.uk/tex-archive/macros/ ... stings.pdf

Zeilenummern, Keywords belibige Kommentarzeichen, zich Programmiersprachen etc. Und du sparst dir das anlegen einer Float mit float.

Verfasst: Do 13. Aug 2009, 16:42
von Bastian
selten so ein schlechte Dokumentation gesehen...

Aber vielen Dank für den Hinweis, das Paket schein echt die optimale Lösung zu sein.

Verfasst: Do 13. Aug 2009, 16:47
von DonCube
Hi Bastian,
Aber einmal eingearbeitet ist das Paket echt praktisch. Habe es selbst auch schon oft verwendet.

Gruß
DonCube

PS: Status anpassen.

Verfasst: Do 13. Aug 2009, 18:41
von Bastian
Habe doch noch mal eine Rückfrage.

Die Listings werden zwar korrekt durchgezählt, aber bei der referenzierung haut was nicht hin... es erscheint nur die Kapitelnummer.
\documentclass[12pt,a4paper]{scrreprt}

\usepackage{listings}
\lstloadlanguages{Matlab,C}
\lstset{% general command to set parameter(s)
basicstyle=\sffamily\footnotesize, % print whole listing small
keywordstyle=\sffamily\footnotesize\bfseries, % ubold black keywords
identifierstyle=, % nothing happens
commentstyle=\sffamily\footnotesize\slshape, % green comments
stringstyle=\sffamily\footnotesize, % typewriter type for strings
showstringspaces=false, % no special string spaces
numbers=left, 
numberstyle=\sffamily\footnotesize, 
stepnumber=1, 
numbersep=10pt,
showspaces=false,
showtabs=false,
frame=lines,
morecomment=[l]{\%},
float=htbp,
numberbychapter=true
}

\begin{document}

\chapter{Kapitel1}

Hier etwas Kode \ref{lst:DFZVf1}.

\begin{lstlisting}[float, caption=Berechnung]
function D_FZVf1 = fcn(D_FZV0,a_xo,k_Ef)
\end{lstlisting}
\label{lst:DFZVf1}

\subsubsection{Unterabschnitt}

Hier noch etwas Kode \ref{lst:DFZVf2}.

\begin{lstlisting}[float, caption=Berechnung]
function D_FZVf1 = fcn(D_FZV0,a_xo,k_Ef)
\end{lstlisting}
\label{lst:DFZVf2}

\chapter{Kapitel2}

Hier noch etwas Kode \ref{lst:DFZVf3}.

\begin{lstlisting}[float, caption=Berechnung]
function D_FZVf1 = fcn(D_FZV0,a_xo,k_Ef)
\end{lstlisting}
\label{lst:DFZVf3}

\end{document}
Und noch eine Bitte: Ich möchte als Kategorie nicht "Listing" sonder "Kode" oder ähnliches... nur wie???

Finde es auch hässlich, dass die horizontalen Linien nicht bis zu den Zeilennummern gehen, aber das kann man wohl nicht ändern...

Danke und Grüße!

Verfasst: Do 13. Aug 2009, 19:13
von bloodworks
\renewcommand{\lstlistingname}{Dein Name}
Du musst das label in der Float bzw der Umgebung haben. Bei Listing geht dsa so
 \begin{lstlisting}[label=blablabla,caption=......]

Verfasst: Do 13. Aug 2009, 19:34
von Bastian
Dank ... Dank ... immer wieder Dank!

Problem beim einbinden von tcl code aus einer Datei

Verfasst: Mo 29. Jun 2015, 13:27
von Lea1602
Hallo zusammen,

ich habe ein Problem beim einbinden von meinem tcl Code. Ich benutze Latex und TexnicCenter für meine Abschlussarbeit.
Das Problem ist das mir zwar der Abschnitt, in welchem der Code stehen soll angezeigt wird und auch die Zeilennummerierung anzeigt allerdings ist das Fenster sonst leer :shock:
Zum einbinden benutze ich das usepackage listnigs und setze mit listset den Rahmen.

 
\usepackage{listings} % um Quelltext von Dateien einzubinden
\usepackage{color}
\definecolor{leichtgrau}{gray}{.90}

\lstset{
frame={tb}, 
backgroundcolor=\color{leichtgrau}, 
language={tcl}, 
showstringspaces=false, 
basicstyle=\ttfamily\small, 
keywordstyle=\color{red}, 
commentstyle=\color{blue}, 
stringstyle=\color{green}, 
numbers={left},
numberstyle={\normalsize},
numbersep={3pt},
stepnumber={1}
}

damit binde ich die Datei ein
\lstinputlisting {Dateien/b.tcl}
ich hoffe mir kann jemand Helfen weil ich echt zwerzeifel

Verfasst: Mo 29. Jun 2015, 13:30
von Johannes_B
Mach doch dafür am besten ein neues Thema nur für dich auf, Platz haben wir hier ja reichlich.

Auch ein Minimalbeispiel wäre nicht schlecht um der Ursache auf den Grund zu gehen.