PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeilennummer in lstlisting ersetzen



tomato
17-10-2010, 17:37
Hallo,

ich wuerde gern bei einem lstlisting eine einzige Zeilennummber gegen ein \Delta-Symbol ersetzen. Gibt es dafuer einen Trick?

Das Ergebnis sollte wie folgt aussehen:


1 int x;
2 x = 42;
\Delta x = 41;
3 ++x;


tomato

tomato
08-11-2010, 12:34
Das Thema ist schon recht lange offen. Ich bin selbst auch noch nicht klueger geworden. Mein letzter Versuch war innerhalb des Listings selbst zu Nummerieren und mit Hilfe des ``escapechar'' anstelle einer Zeilennummer das \Delta-Symbol einzufuegen. Das Resultat ist nicht wirklich elegant (zu viel manueller Aufwand) und schaut eigentlich auch nicht gut aus, da die Nummern und das \Delta-Symbol nicht gleich viel Platz benoetigen.

Xenara
08-11-2010, 13:51
Für gewöhnlich hält sich die Motivation bei potentiellen Helfern ohne direkt kompilierbares Minimalbeispiel sehr in Grenzen. Jedes Stückchen Code, und wenn nur die benötigten Pakete und das drinsteht, was eben nicht geht, hilft.

Hier trotzdem ein Vorschlag:


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

\usepackage{listings}

\begin{document}

\lstset{numbers=left}
\begin{lstlisting}[name=test]
Mit normalem
Quelltext
mit
Nummerierung
anfangen
\end{lstlisting}%
%
\vspace*{-.75\baselineskip}%
%
\begingroup%
\renewcommand*{\thelstnumber}{$\Delta$}
\begin{lstlisting}
Zwischendurch eine Linie mit Delta als Nummerierung.
\end{lstlisting}
\endgroup%
%
\vspace*{-.75\baselineskip}%
%
\begin{lstlisting}[name=test]
Weiter mit normalem\\
Quelltext
\end{lstlisting}

\end{document}

tomato
09-11-2010, 07:50
Vielen Dank fuer deine Antwort. Die Loesung gefaellt mir sehr gut.


Für gewöhnlich hält sich die Motivation bei potentiellen Helfern ohne direkt kompilierbares Minimalbeispiel sehr in Grenzen. Jedes Stückchen Code, und wenn nur die benötigten Pakete und das drinsteht, was eben nicht geht, hilft.


Ich verstehe. Mein Fehler!

Mein Versuch hat in etwa so ausgesehen. Mir war aber klar, dass das recht unsauber ist und dementsprechend wollte ich es nicht posten.


\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{escapechar=\%}
\begin{lstlisting}
1 int foo() {
2 int x;
3 x = 42;%$\newline\Delta$% x = 43;
4 return x;
5 }
\end{lstlisting}
\end{document}


Der Vorteil bei dieser Loesung ist, dass sich der Programmcode in ein File auslagern laesst, das ich via lstinputlisting einbinden kann. Deine Loesung ist viel eleganter und das Resultat schaut auch besser aus, aber dieser Vorteil wuerde mir verloren gehen. Zumindest sehe ich ad-hoc nicht, wie sich das in ein File auslagern laesst (abgesehen von input). Gibt's dafuer einen Trick?

tomato

Xenara
09-11-2010, 08:10
Dein Ansatz ist doch Klasse, wenn ich draufgekommen wäre, dass man mit \newline was in den Rand schieben kann, hätte ich das auch gemacht. So hab ich auch wieder was gelernt :)
Über listinputlistings müsstes du bei deiner Variante wahrscheinlich den \newline...-Befehlt direkt in deinen Code schreiben (vermute ich).
Wenn meine Lösung da für dich praktischer ist, umso besser.

tomato
09-11-2010, 11:12
Nicht ganz. Ich muss selbst Nummerieren und die Einrueckung ist nicht mehr richtig in der $\Delta$-Zeile.

Was ich gern haette, waere sowas wie das da. Aber es funktioniert so nicht!


\documentclass{article}
\usepackage{listings}
\begin{document}
\lstset{escapechar=\%,numbers=left}
\begin{lstlisting}
int foo() {
int x;
x = 42;
%\renewcommand*{\thelstnumber}{$\Delta$}% x = 43;
return x;
}
\end{lstlisting}
\end{document}


tomato

Xenara
09-11-2010, 11:37
Das hatte ich ursprünglich auch probiert, aber es scheint, als würde das \renewcommand innerhalb von listings nicht funktionieren, daher die Lösung mit der Unterbrechung.

tomato
11-11-2010, 21:03
Hoechst wahrscheinlich ist \renewcommand falsch ;). Ich bin noch immer auf der Suche nach einer besseren Loesung. Dein Latex-Code ist ein bisschen umstaendlich und meiner funktioniert nicht richitg.

Ich bin mir sicher, dass es eine bessere Loesung gibt, da ich diese Darstellung hin und wieder in Buechern sehe. Vielleicht sollte ich statt listings etwas anderes verwenden ...