PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Listing Package und linerange ...



chris21
17-05-2007, 12:24
Hallo,
ich binde in meine LaTeX Dokumetation C Code ein, allerding möchte ich nur betimmte Zeilen des Codes einbinden .... das mache ich mit linerange

also zb siht das ganze dann so aus :


\lstinputlisting[language=systemc,alsolanguage=c++,defaultdialect=g nu,linerange={100-128,200-205},showlines=false, backgroundcolor=\color{hellgrau},caption={Lieting bezeichnung},label =class_data_obj ]{header.h}


die Zeilen werden auch wie gewünscht angezeigt, allerdings ist die zeilennummerierung durchgehend ... geginnt also bei 1 und zählt dann hoch .,..
dadurch ist für den leser nicht erkennbar, das es sprünge im code gitb ?

Gibt es eine Möglichkeit die Blöcke voneinander abzugrenzen ?
Es würd schoen reichen die Zeilennummern mit 100-128 und dann wieder von 200-205 zu beschriften.

Ich habe schon in der Beschreibung zum Litsting Package nachgeschaut
Then, there are several ideas for the future. Some have already been stated as
`to do’s; some came from other people and are stated below; some more are far
from being implemented, e.g. linerange=[hinter i]{hline range listi} which prints
all lines in the range and executes hinter i when omitting some code lines. The
main problem here are frames and background colours; what should happen to
them? In fact, the problem is how this can be coded. Another idea is to change
the background colour (or the basic style) for particular code blocks. This, too, is
not easy.

Danke für Hinweise
Chris

lupus68
17-05-2007, 17:33
Hallo Chris21,

schau mal in ie doku von listings da gibt es bei mir, irgendwo unter 4.8 Line numbers
-> \thelstnumbers ...

juergen

chris21
18-05-2007, 09:15
hi,
danke erstmal, aber so richtig schlau werde ich da nicht draus ...
gitbs vielleicht noch ein weiteres beispiel ? .....
hab schon gegoogelt aber nicht wirklich was gefunden ....

Danke
chris

chris21
19-05-2007, 18:01
Hi,

also ich hab mir das angeschaut, aber ich denke du hast mich falsch verstanden.

Ich möchte nicht ein Listing mit den Zeilennummern 1-100 und das folgende Listing mit den Zeilennummeer 145-150 beschriften,

ich möchte in einem einzigen Listing die Zeilennummern 1-100 und 145-150 vergeben ......

also soll innherhalb des lsistings so aussehen

Listing 1
..
..
99 code
100 code
145 blabla
146 blabla
..
..

da ich mit linerange innherhalb des listings schon zeilen rauschneide, durch die springende nummerierung von 100 zu 145 soll erkennbar sein, das inerhalb des listings ein paar codezeieln fehlen .......

Falls jemand noch ein Tipp hat ....
(Ich hab irgdwo von dem Pckage linum (o.ä.) gelesen, aber leider keine dokumentation gefunden) ......

mir würde es auch reichen z.B. einen strich zwischen den zeilen 100 - 145 machen zu können ..... dachte mir ich kann das lsiting package irgendwo ein \hline reinpacken ..... aber leider hab ich von packages schreiben abolut keine ahnung .... falls jemand ein tutorial kennt wie man eigene packages schreibt wäre ein link nett .... danke

Danke nochmals,

Chris

chris21
20-05-2007, 11:32
Hi,
hab das nochmal versucht und bin jetzt bischen dahintergestiegen.

ich hab nun ein neuen counter angelegt {linec},
der soll dann bei jedem sprung neu auf einen startwert gesetzt werden, deswegen das setcounter{linec}{startwert}



\newcounter{linec}
\renewcommand*\thelstnumber{\oldstylenums{\value{l inec}}}

\lstinputlisting[language=systemc,alsolanguage=c++,defaultdialect=g nu,linerange={1\setcounter{linec}{1}-23,100\setcounter{linec}{100}-120},showlines=false, backgroundcolor=\color{hellgrau},caption={test}, label = test.cpp]{test.cpp}


da kommen massenhaft fehler "missing number , treated as zero"
vielleicht kann mir jemand ein hinweis geben ?

Danke
Chris

bobmalaria
20-05-2007, 11:39
hi,

ich kenne das listing paket nicht allzu genau, aber meines wissens kann man doch einen escape-parameter definieren welcher es erlaubt, "normale" befehle innerhalb der listing umgebung aufzurufen.

vielleicht ist es möglich den befehl \thelstnumbers zwischen diese escape-characters zu schreiben um damit innerhalb einer umgebung verschiedene zeilennummern zu realisieren.


EDIT: habs doch eben noch schnell probiert.

\begin{lstlisting}[firstnumber=1,escapechar=|]
Private Sub Application_NewMail()
|\setcounter{lstnumber}{5} \vspace{5em}|
Dim Foldername As String
Dim objIn As MAPIFolder


der counter wird geändert und es wird ein abstand eingefügt. allerdings unterbricht dieser abstand den äußeren rahmen. sieht aber gar nicht so schlecht aus.
du musst dann aber deine beide code-abschintte in getrennte dateien ablegen um diesen befehl zwischendrin aufzurufen

gruß

chris21
20-05-2007, 13:11
Hallo,
danke erstmal dass du es dir angeschaut hast.
irgendwie ist mir nicht ganz wohl dabei in meinen C Quelltext LaTeX Code zur Dokumentation einzubauen.
(hab das schon mal gemacht wie in der doku beschrieben um auf einzelne zeilen zu referenzieren, aber wie gesagt .. da bin ich noch mal überlegen wie ich das in der endgültigen version handhaben soll)

Natürlich könnte ich zwei verschiedene Versionen meines Quellcodes machen,
aber das scheint mir irgendwie sinnlos ... immer alles doppelt ändern zu müssen.

Ist es denn nicht möglich das bei dem aufruf einzubinden, etwa so:


\lstinputlisting[firstnumber=1,escapechar=|,language=systemc,alsola nguage=c++,defaultdialect=gnu,linerange={99-101,|\setcounter{lstnumber}{5} \vspace{5em}|,124-128},showlines=false, backgroundcolor=\color{hellgrau},caption={test},la bel =test]{test.h}


also habs auch grad probiert .... so geht es nicht! .. aber vielleicht irgendwie so ähnlich ??

Danke
Chris

chris21
20-05-2007, 18:30
hey,
jetzt hab ich mal in die /listings.dtx reingeschaut.
( hab einfach mel eine Datein geöffnet die ich unter http://www.ctan.org/tex-archive/macros/latex/contrib/listings/ gesehen habe)

Also da steht ein Eintrag drinn:


lstisaspect[experimental]{includerangemarker,rangebeginprefix,rangebeginsuf fix,rangeendprefix,rangeendsuffix,rangeprefix,rang esuffix}


also hab ich einfach mal getestet und

\lstinputlisting[language=systemc,alsolanguage=c++,defaultdialect=g nu,linerange={23-40,120-130},includerangemarker=true,showlines=false, backgroundcolor=\color{hellgrau},caption={SystemC} , label = test.cpp]{test.cpp}

probiert, und es geht !! jetzt werden als zeilennummern 23, 24 usw bis 40 angezeigt, danach gehts mit zeile 120,121,usw bis 130 weiter !!!!

Ich denk es hilft vielleicht mal dem ein oder anderen der das gleich sucht wie
ich hier.

Irgdwie kann man wohl auch noch mit


}{\lstset{rangeprefix=\{\ ,rangesuffix=\ \}}}{}


irgendwelche zeichen sezten mit denen man den code eingrenzt,
steht aber auch in der oben genannten datei ( einfach nach includerangemarker suchen)

Danke für die Unterstützung!

Chris

herbertwind
24-07-2007, 15:06
Ich verwende folgenes Codestück:

\lstinputlisting[frame=single,label=list:VSservice2,language={[Sharp]C},
linerange={1-17,52-70},includerangemarker=true,showlines=false,
caption=Sourcecode der Web-Service-Implementierung]
{sourcecode/NET/SimpleHotelService/SimpleHotelService.asmx.cs}

Die Zeilen 18-51 werden richtigerweise nicht angezeigt, jedoch ist die Zeilennummerrierung bei den verbleibenden Zeilen durchgehend (1-36).
Hat jemand eine Idee woran das liegt?

Ich verwende Listings 1.4.

\usepackage{listings}
\lstset{extendedchars=true}
\lstset{numbers=left, numberstyle=\tiny, numbersep=5pt}
\lstset{language=XML,basicstyle=\scriptsize,breakl ines=true}

Zoomy
24-07-2007, 22:57
Könntest du mal ein Minimalbeispiel posten, den wenn ich genau deine Code nehme, dann ist auch die Nummerierung von 18 bis 51 nicht vorhanden

herbertwind
27-07-2007, 11:12
Hier ein vollständiges Beispiel, welches bei mir nicht richtig funktioniert:


\documentclass[a4paper,11pt,oneside]{book}

\usepackage{listings}
\lstset{extendedchars=true}
\lstset{numbers=left, numberstyle=\tiny, numbersep=5pt}
\lstset{language=XML,basicstyle=\scriptsize,breakl ines=true}

\begin{document}

\lstinputlisting[frame=single,label=list:VSservice2,language={[Sharp]C},
linerange={1-17,52-70},includerangemarker=true,showlines=false,
caption=Sourcecode der Web-Service-Implementierung]
{SimpleHotelService.asmx.cs}

\end{document}

chris21
30-07-2007, 11:57
Hallo,
ich glaube du musst ein älteres Listings Package installieren.
Das hat mich ziemlich viele Nerven gekostet.
Hier habe ich noch ein Thread dazu eröffnet :
http://www.mrunix.de/forums/showthread.php?t=51051

Die alten Sourcen habe ich letztendlich von meinem anderen PC, auf dem eine älter Version installiert war, und es funktioniert hat, kopiert.
Dann habe ich es nach Möglichkeit 2 von sommerfee in dem Oben verlinkten Thread manuell installiert.

Falls du es nirgendwo findest, kann ich dir die DAteien per Mail schicken.

Irgendwie verstehe ich aber nicht warum so eine sinnvolle Funktion bei dem neuen Listing Package nicht mehr da ist, vielleicht weis es jemand von euch ?

Chris