PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommentare zu lang in listings



Caveman
31-03-2006, 11:24
Meine Kommentare in einem C-Programm sind zu lang.
Ich möchte sie aber nicht kürzen.
Mir ist es egal in welcher Schrift sie sind, Hauptsache sie passen in eine Zeile ohne über den Rand zu schreiben. Doch irgendwie schaffe ich das nicht.

Weiß jemand eine Lösung?



\documentclass[a4paper,12pt]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[dvips]{graphicx}

\usepackage{listings}
\lstloadlanguages{C}
\lstset{language=C,commentstyle=\rmfamily\fontsize {10}{10}}
% ein weiteres Beispiel
%\lstset{language=C,commentstyle=\fontfamily{ptm}\ tiny\slshape}
\lstset{frame=single}

\begin{document}
Eine "`for"'-Schleife in C:
\begin{lstlisting}[keywordstyle=\textbf]
/** Dies ist ein kleiner Beispiel-Code *
* *
* Dieser Kommentar ist sehr lang und soll trotzdem in einer Zeile stehen. *
* *
* Noch mehr Kommentar *
* Und noch mehr Kommentar */

int sum = 0; // Summe
int i = 0; /* Schleifenvariable */
// Dieser Kommentar ist zu lang
for (i; i < 10; i++)<n; n="">
{ sum += a[i]; }
\end{lstlisting}
\end{document}<n; n=""></n;></n;>

Jollero
31-03-2006, 12:30
Na ja, das Problem ist doch, dass man den Quelltext und die Kommentare viel kleiner machen müsste. Das sieht meiner Meinung nach suboptimal aus. Wird sicher über eine der vielen Einstellungen von listings gehen...

z.B. basicstyle=\scriptsize %Schrifteinstellungen einstellen

Ansonsten würde ich das Blatt mit dem Package pdflscape einfach aufs Querformat drehen oder ist das listing mit im Textfluss integriert?

Hoffe, das hilft...

Caveman
31-03-2006, 13:25
Querformat fällt völlig aus. Das ganze soll im Textfluss sein.
basicstyle ändert den gesamten Code - ist auch nicht gewollt.

mit \scriptsize und auch \tiny habe ich schon rumexperimentiert:
Das Problem hierbei ist, dass die Schrift zwar kleiner wird, aber die Länge der Zeile kaum beeinflusst wird.

Ich bräuchte also etwas, dass die Buchstaben näher zusammen rückt.
Oder eine Schrift, die sehr schmal ist.

Es sind gerade mal 80 Zeichen. Die sollten doch irgendwie in eine Zeile gehen.

countbela666
31-03-2006, 13:36
Das Problem hierbei ist, dass die Schrift zwar kleiner wird, aber die Länge der Zeile kaum beeinflusst wird.Das liegt daran, dass per default fixe Spaltenbreiten genutzt werden (s. listings-Doku S. 18). So sollte es klappen:

\documentclass[a4paper,12pt]{scrartcl}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[dvips]{graphicx}

\usepackage{listings}
\lstloadlanguages{C}
\lstset{language=C,commentstyle=\tiny\rmfamily,col umns=flexible}
\lstset{frame=single}

\begin{document}
Eine "`for"'-Schleife in C:
\begin{lstlisting}[keywordstyle=\bfseries]
/** Dies ist ein kleiner Beispiel-Code *
* *
* Dieser Kommentar ist sehr lang und soll trotzdem in einer Zeile stehen. *
* *
* Noch mehr Kommentar *
* Und noch mehr Kommentar */

int sum = 0; // Summe
int i = 0; /* Schleifenvariable */
// Dieser Kommentar ist zu lang
for (i; i < 10; i++)
{ sum += a[i]; }
\end{lstlisting}
\end{document}Grüße,
Marcel

Caveman
31-03-2006, 13:45
Danke,
das war's.

Ich nehme allerdings flexible anstatt fullflexible.

Die Korrektur im Header lautet damit folgenderweise:

\usepackage{listings}
\lstloadlanguages{C}
\lstset{language=C,commentstyle=\small,columns=fle xible}

bischi
31-03-2006, 15:50
Und sonst kann man Kommentare ja immer noch über mehrere Zeilen machen.

Mfg Bischi

Caveman
31-03-2006, 16:29
Und sonst kann man Kommentare ja immer noch über mehrere Zeilen machen.Das schon, aber meine Programme sind nun mal so aufgebaut, dass Zeilen bis zu 80 Zeichen lang sind
Wenn ich nun einen Kommentar habe, der länger ist, weil ich zum Beispiel eine ganze Funktion beschreibe, dann habe ich mehrere Zeilen mit jeweils 80 Zeichen. Dies ist für Latex mit den Standard-Einstellungen zu lang und mal schnell sämtliche Kommentare umzuschreiben ist zu aufwendig


Für alle, die das selbe Problem haben, hier der komplette Code, wie er (vielleicht) in meine Diplomarbeit eingeht.

\documentclass[a4paper,12pt]{scrartcl}

\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{color}

\title{C-Programmierung}
\author{Michael Dommel}
\date{31.03.2006}

\usepackage{listings}
\lstloadlanguages{C, Perl}
\lstset{
keywordstyle=\textbf, extendedchars=ture,
backgroundcolor=\color[gray]{0.9},
numbers=left, numberstyle=\scriptsize, stepnumber=2, numbersep=5pt,
xleftmargin=12pt, xrightmargin=12pt,
commentstyle=\small,columns=flexible,
showstringspaces=false}

\begin{document}

\maketitle

Ein kleines Beispiel mit einer "`for"'-Schleife geschrieben in C:
\begin{lstlisting}[language=C,firstnumber=1]
/** Dies ist ein kleiner Beispiel-Code *
* *
* Dieser Kommentar ist sehr lang und soll trotzdem in einer Zeile stehen. *
* *
* Noch mehr Kommentar *
* Und noch mehr Kommentar */

int sum = 0; /* Summe */
int i = 0; /* Schleifenvariable */
/*Dieser Kommentar ist zu lang*/
for (i; i<10; i++)<n; n="">
{
sum += a[i];
}
\end{lstlisting}
Ab hier steht der Abschnitt, der das Programm erklärt.

\end{document}
Der Programm-Code ist in einem rahmenlosen Kasten, der leicht grau eingefärbt ist </n;>und seitlich etwas hereingerückt ist.<n; n=""> Zu dem ist jede zweite Zeile mit einer Nummer auf der linken Seite markiert.

Edit: doppelt vorhandene Zeile im Code entfernt
</n;>

countbela666
31-03-2006, 18:11
Ich denke mal, bischi meinte mit seiner Anmerkung, dass du die Kommentarzeilen ja auch vom listings-Paket umbrechen lassen kannst (breaklines=true). Dazu musst du ja keine Änderungen an deinem Quellcode vornehmen.

Grüße,
Marcel

Caveman
31-03-2006, 20:00
Das würde aber nicht so gut ausschauen, da ich bei großen Kommentaren in jeder Zeile links (Spalte 2) und rechts (Spalte 79) einen Stern mache.
Diese Regel würde dann völlig umgeworfen werden.

bischi
31-03-2006, 20:42
Das würde aber nicht so gut ausschauen, da ich bei großen Kommentaren in jeder Zeile links (Spalte 2) und rechts (Spalte 79) einen Stern mache.
Diese Regel würde dann völlig umgeworfen werden.

Was wiederum nicht toll aussieht, wenn nicht alle Buchstaben gleich gross sind ;)

MfG Bischi

Caveman
01-04-2006, 08:44
Doch, denn die Sterne bleiben - zu meiner Verwunderung - schön in einer Reihe untereinander.
Beim Kommentar bin ich soweit zufrieden.
Jetzt bin ich allerdings dabei zu versuchen, dass columns=flexible nur beim Kommentar gültig ist und der eigentliche Code so ist, wie man es gewohnt ist.

philharmony
17-09-2009, 16:49
Der Beitrag ist zwar schon älter, aber ich habe ein ähnliches Problem, die Kommentare gehen über das Blatt hinaus. Da ich aber die Codezeilen sowieso in der Arbeit erläutere, müssen die Komentare eigentlich auch gar nicht erscheinen. Gibt es da ne Möglichkeit? commentstype=\color{white} geht nicht, weil der Quellcode grau hinterlegt ist, das blatt drumrum aber logischerweise Weiß.