Guten Tag,
meine Frage bezieht sich auf das Package "Listings". Ich würde gerne verschiedene Teile meines Quellcodes in meiner Bachelorarbeit preisgeben. Allerdings sind viele meiner Codeblöcke minimiert und so soll es auch bleiben. Das Problem ist, dass die Zeilennummern fortlaufen sind.
Ist es möglich, die Zeilennummern manuell zu setzten?
Beispiel:
01 int i;
02
03 minimierte_methode()[...]
15 //weiterer Code
oder
01 int i;
02
03 minimierte_methode()
04 [...]
15 //weiterer Code
Ich weiß bis jetzt nur von "firstnumber" und packe im Moment mehrere Listings zusammen und füge nur bei der letzten eine Caption bei. Das ist natürlich geschummelt und man sieht die Abstände zwischen den einzelnen Listings.
Vielen Dank im voraus.
Mit freundlichen Grüßen
19gonzo04
Listings: Zeilennummerierung bei minimierten Codeblöcken
Die Frage ist für mich unklar. Ist das Problem, dass die Zeilennummern fortlaufend angezeigt werden, obwohl sie im tatsächlichen Listing nicht fortlaufend sind oder dass Du sie fortlaufend haben willst, sie aber nicht fortlaufend angezeigt werden? Ich vermute ersteres (müsste aber nicht extra fragen, wenn Du ein Minimalbeispiel eingefügt hättest, wie das hier aus gutem Grund ständig nachgefragt wird).
Abstände vor und nach Listings sind übrigens konfigurierbar.
Abstände vor und nach Listings sind übrigens konfigurierbar.
Ich bitte um Entschuldigung, ich habe nicht erwartet hier ein Minimalbeispiel anführen zu müssen, aber dies hole ich natürlich gerne nach:
Hoffe es ist für ein Minimalbeispiel nicht zu lang, habe schon nur die Stellen rauskopiert, die ich für die Erstellung dieses Problem brauche.
Wie Du richtig vermutet hast, ist ersteres der Fall. Im tatsächlichen Code sind minimierte Codeblöcke und das sieht dann so aus, wie im Minimalbeispiel. Würde ich dieses Beispiel in eine Liste packen, wäre die zweite Zeile mit der Zahl "243" nummeriert. Ich möchte es so, wie es jetzt aussieht, nur halt in einer Liste.
\documentclass[a4paper,12pt]{scrreprt} \usepackage[left= 2.5cm,right = 2cm, bottom = 4 cm]{geometry} \usepackage[onehalfspacing]{setspace} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} %Schriftpakete \usepackage[T1]{fontenc} \usepackage{listings} \usepackage{xcolor} \lstloadlanguages{C,C++,csh,Java} %Farben für schlüsselwörter \definecolor{bluekeywords}{rgb}{0,0,1} \definecolor{greencomments}{rgb}{0,0.5,0} \definecolor{redstrings}{rgb}{0.64,0.08,0.08} \definecolor{xmlcomments}{rgb}{0.5,0.5,0.5} \definecolor{types}{rgb}{0.17,0.57,0.68} \lstset{language=[Sharp]C, captionpos=b, frame=single, framesep=\fboxsep, framerule=\fboxrule, numbers=left, %Nummerierung %numberstyle=\tiny, % kleine Zeilennummern frame=lines, % Oberhalb und unterhalb des Listings ist eine Linie showspaces=false, showtabs=false, breaklines=true, showstringspaces=false, breakatwhitespace=true, escapeinside={(*@}{@*)}, commentstyle=\color{greencomments}, morekeywords={partial, var, value, get, set}, keywordstyle=\color{bluekeywords}, stringstyle=\color{redstrings}, basicstyle=\ttfamily\small, lineskip=1pt, literate={ö}{{\"o}}1 {ä}{{\"a}}1 {ü}{{\"u}}1 } \usepackage{caption} \DeclareCaptionFont{white}{\color{white}} \DeclareCaptionFormat{listing}{% \hspace*{-0.4pt}\colorbox{blue}{\parbox{\dimexpr\textwidth-2\fboxsep+.8pt\relax}{#1#2#3}}} \captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}} \lstdefinestyle{sharpc}{language=[Sharp]C, frame=lr, rulecolor=\color{blue!80!black}} \begin{document} \begin{lstlisting}[language={[Sharp]C}, firstnumber=242] private void ModBus_Tx(string aModBus_String)[...] \end{lstlisting} \begin{lstlisting}[language={[Sharp]C}, caption={Modbus-Protokoll Tabpage}, label=rtxtmb, firstnumber=272] private void ModBus_Rx(string aModBus_String)[...] \end{lstlisting} \end{document}
Wie Du richtig vermutet hast, ist ersteres der Fall. Im tatsächlichen Code sind minimierte Codeblöcke und das sieht dann so aus, wie im Minimalbeispiel. Würde ich dieses Beispiel in eine Liste packen, wäre die zweite Zeile mit der Zahl "243" nummeriert. Ich möchte es so, wie es jetzt aussieht, nur halt in einer Liste.
Hier werden gewöhnlich fast immer Minimalbeispiel erwartet.
Du könntest \thelstnumber ändern:
Wenn der englische Name "Listing" vor der gewählten Beschriftung keine Vorgabe ist, dann kann dieser ersetzt werden.
Nachtrag: In meinem Beispiel fehlte die schließende geschweifte Klammer nach dem Ende der lstlisting-Umgebung.
Du könntest \thelstnumber ändern:
\documentclass[fontsize=12pt]{scrreprt} \usepackage[left= 2.5cm,right = 2cm, bottom = 4 cm]{geometry} \usepackage[onehalfspacing]{setspace} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} %Schriftpakete \usepackage[T1]{fontenc} \usepackage{listings} \usepackage{xcolor} \lstloadlanguages{C,C++,csh,Java} %Farben für schlüsselwörter \definecolor{bluekeywords}{rgb}{0,0,1} \definecolor{greencomments}{rgb}{0,0.5,0} \definecolor{redstrings}{rgb}{0.64,0.08,0.08} \definecolor{xmlcomments}{rgb}{0.5,0.5,0.5} \definecolor{types}{rgb}{0.17,0.57,0.68} \lstset{language=[Sharp]C, captionpos=b, frame=single, framesep=\fboxsep, framerule=\fboxrule, numbers=left, %Nummerierung %numberstyle=\tiny, % kleine Zeilennummern frame=lines, % Oberhalb und unterhalb des Listings ist eine Linie showspaces=false, showtabs=false, breaklines=true, showstringspaces=false, breakatwhitespace=true, escapeinside={(*@}{@*)}, commentstyle=\color{greencomments}, morekeywords={partial, var, value, get, set}, keywordstyle=\color{bluekeywords}, stringstyle=\color{redstrings}, basicstyle=\ttfamily\small, lineskip=1pt, literate={ö}{{\"o}}1 {ä}{{\"a}}1 {ü}{{\"u}}1 } \usepackage{caption} \DeclareCaptionFont{white}{\color{white}} \DeclareCaptionFormat{listing}{% \hspace*{-0.4pt}\colorbox{blue}{\parbox{\dimexpr\textwidth-2\fboxsep+.8pt\relax}{#1#2#3}}} \captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}} \lstdefinestyle{sharpc}{language=[Sharp]C, frame=lr, rulecolor=\color{blue!80!black}} \begin{document} {% \renewcommand*{\thelstnumber}{% \ifnum\value{lstnumber}=243 \setcounter{lstnumber}{272}% \fi \arabic{lstnumber}% } \begin{lstlisting}[language={[Sharp]C}, caption={Modbus-Protokoll Tabpage}, label=rtxtmb, firstnumber=242] private void ModBus_Tx(string aModBus_String)[...] private void ModBus_Rx(string aModBus_String)[...] \end{lstlisting}}% <- geändert \end{document}
Nachtrag: In meinem Beispiel fehlte die schließende geschweifte Klammer nach dem Ende der lstlisting-Umgebung.
Zuletzt geändert von Bartman am Fr 31. Aug 2018, 23:56, insgesamt 3-mal geändert.
Wie gesagt, kann man die Abstände über und unter Listings ändern. Und man kann auch nur mit einer Linie arbeiten:
und natürlich könntest Du so zwischen den beiden Listings auch Pünktchen einfügen. Dazu einfach das % am Anfang der \vdots-Zeile entfernen.
\documentclass[a4paper,12pt]{scrreprt} \usepackage[left= 2.5cm,right = 2cm, bottom = 4 cm]{geometry} \usepackage[onehalfspacing]{setspace} \usepackage[utf8]{inputenc} \usepackage[ngerman]{babel} %Schriftpakete \usepackage[T1]{fontenc} \usepackage{listings} \usepackage{xcolor} \lstloadlanguages{C,C++,csh,Java} %Farben für schlüsselwörter \definecolor{bluekeywords}{rgb}{0,0,1} \definecolor{greencomments}{rgb}{0,0.5,0} \definecolor{redstrings}{rgb}{0.64,0.08,0.08} \definecolor{xmlcomments}{rgb}{0.5,0.5,0.5} \definecolor{types}{rgb}{0.17,0.57,0.68} \lstset{language=[Sharp]C, captionpos=b, frame=single, framesep=\fboxsep, framerule=\fboxrule, numbers=left, %Nummerierung %numberstyle=\tiny, % kleine Zeilennummern frame=lines, % Oberhalb und unterhalb des Listings ist eine Linie showspaces=false, showtabs=false, breaklines=true, showstringspaces=false, breakatwhitespace=true, escapeinside={(*@}{@*)}, commentstyle=\color{greencomments}, morekeywords={partial, var, value, get, set}, keywordstyle=\color{bluekeywords}, stringstyle=\color{redstrings}, basicstyle=\ttfamily\small, lineskip=1pt, literate={ö}{{\"o}}1 {ä}{{\"a}}1 {ü}{{\"u}}1 } \usepackage{caption} \DeclareCaptionFont{white}{\color{white}} \DeclareCaptionFormat{listing}{% \hspace*{-0.4pt}\colorbox{blue}{\parbox{\dimexpr\textwidth-2\fboxsep+.8pt\relax}{#1#2#3}}} \captionsetup[lstlisting]{format=listing,labelfont=white,textfont=white, singlelinecheck=false, margin=0pt, font={bf,footnotesize}} \lstdefinestyle{sharpc}{language=[Sharp]C, frame=lr, rulecolor=\color{blue!80!black}} \begin{document} \begin{lstlisting}[language={[Sharp]C}, firstnumber=242,frame=t,belowskip=0pt] private void ModBus_Tx(string aModBus_String)[...] \end{lstlisting} %$\vdots$ \begin{lstlisting}[language={[Sharp]C}, caption={Modbus-Protokoll Tabpage}, label=rtxtmb, firstnumber=272,frame=b,aboveskip=0pt] private void ModBus_Rx(string aModBus_String)[...] \end{lstlisting} \end{document}
Vielen Dank
Vielen Dank für Eure Hilfe!
Ich habe es mit der Methode von Bartman gemacht, allerdings sahen beide Methoden optisch gleich aus. Allerdings hat Bartman es in einem Listings gepackt, was wahrscheinlich nachher für ein Quellcodeverzeichnis besser ist (Ja, ich weiß, das man die anderen künstlich herausnehmen kann).
Man kann die Funktion von Bartman beliebig erweitern, wie ich es gemacht habe:
Ich schließe damit den Eintrag.
Ich habe es mit der Methode von Bartman gemacht, allerdings sahen beide Methoden optisch gleich aus. Allerdings hat Bartman es in einem Listings gepackt, was wahrscheinlich nachher für ein Quellcodeverzeichnis besser ist (Ja, ich weiß, das man die anderen künstlich herausnehmen kann).
Man kann die Funktion von Bartman beliebig erweitern, wie ich es gemacht habe:
\renewcommand*{\thelstnumber}{ \ifnum\value{lstnumber}=105 \setcounter{lstnumber}{151} \fi \ifnum\value{lstnumber}=152 \setcounter{lstnumber}{191} \fi \ifnum\value{lstnumber}=192 \setcounter{lstnumber}{242} \fi \ifnum\value{lstnumber}=243 \setcounter{lstnumber}{272} \fi \ifnum\value{lstnumber}=273 \setcounter{lstnumber}{299} \fi \ifnum\value{lstnumber}=300 \setcounter{lstnumber}{303} \fi \arabic{lstnumber} }
Re: Vielen Dank
Die Einträge im Quelltextverzeichnis richten sich nach den Zuweisungen an die caption-Option. Das geschieht im Beispiel des Gastes nur einmal. Teste es einfach mit dem entsprechenden Befehl des Pakets.19gonzo04 hat geschrieben:Allerdings hat Bartman es in einem Listings gepackt, was wahrscheinlich nachher für ein Quellcodeverzeichnis besser ist (Ja, ich weiß, das man die anderen künstlich herausnehmen kann).