newenvironment für shell-ausgaben soll verbatim nutzen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: newenvironment für shell-ausgaben soll verbatim nutzen

von ChrisPZV » Mi 24. Nov 2010, 16:03

Danke für die Blumen. Tja, ich kenne die Problematik aus eigener Moderationserfahrung. Da versucht man doch, es besser zu machen, jedenfalls so, wie man es selbst gerne hätte...
Danke nochmal.
KOMA hat geschrieben:Fehler meinerseits. Das muss natürlich \setstretch{1} und nicht \setspace{1} heißen. Auch da gilt dann natürlich, dass im Gegenzug das \singlespacing entfernt werden muss.
Den Beitrag von dir habe ich gestern in der Windeseile beim Probieren deiner Vorschläge komplett übersehen. Ich habs jetzt gleich noch mal probiert, \singlespacing kann in der Tat weg und basicstyle muss dann auf "basicstyle=\ttfamily\setstretch{1}," erweitert werden. die Kommandos scheinen auf das selbe Paket zurückzugreifen, \usepackage{setspace} ist jeweils zwingend erforderlich.

von Xenara » Mi 24. Nov 2010, 15:32

So höflichen und vorbildlichen Fragestellern, die ein lauffähiges Minimalbeispiel mit aussagekräftiger Fehlerbeschreibung und eigenen Versuchen liefern und dann auch noch Rückmeldung geben, wie sie es gelöst haben, hilft man immer wieder gern :)

von ChrisPZV » Mi 24. Nov 2010, 15:02

Klasse, so funktioniert's!
Hier noch mal meine funktionierende Environment-Deklaration für die Nachwelt:
\lstnewenvironment{shell}{
	\endgraf
	\singlespacing
	\lstset{
		columns=fullflexible,
		language=bash,
		showstringspaces=false,
		basicstyle=\ttfamily,
		keywordstyle=\color{black},
		commentstyle=\color{black},
		stringstyle=\color{black},
		numbers=none,
		tabsize=4,
		breaklines=true,
		breakatwhitespace=true,
		frame=none}
}{}
Vielen vielen vielen Dank für eure, mir geschenkte, Freizeit!

von KOMA » Mi 24. Nov 2010, 15:00

ChrisPZV hat geschrieben:
KOMA hat geschrieben:[...] erweitere den basicstyle um \linespead{1}\selectfont [...]
Das kompiliert, aber ändert nicht den Zeilenabstand in den Zeilen über dem \begin{shell}.
Du musst im Gegenzug zu der Änderung das \singlespacing natürlich aus der Definition der Umgebung entfernen.
KOMA hat geschrieben:Füge vor dem \singlespacing ein \par ein oder erweitere den basicstyle um \linespead{1}\selectfont oder \setspace{1}.
Fehler meinerseits. Das muss natürlich \setstretch{1} und nicht \setspace{1} heißen. Auch da gilt dann natürlich, dass im Gegenzug das \singlespacing entfernt werden muss.

von KOMA » Mi 24. Nov 2010, 14:55

\endgraf statt \par verwenden

von ChrisPZV » Mi 24. Nov 2010, 14:42

KOMA hat geschrieben:Füge vor dem \singlespacing ein \par ein [...]
Stimmt an ein \par einfügen habe ich auch schon mal gedacht aber das quittiert der Kompiler mit "Paragraph ended before \lstnewenvironment@ was complete \par".
KOMA hat geschrieben:[...] erweitere den basicstyle um \linespead{1}\selectfont [...]
Das kompiliert, aber ändert nicht den Zeilenabstand in den Zeilen über dem \begin{shell}.
KOMA hat geschrieben:[...] erweitere den basicstyle um [...] \setspace{1}.
Der Versuch endet mit derFehlermeldung "Undefined control sequence \begin{shell}".
:-| Danke dir trotzdem, jeder plausibel klingende Vorschlag macht ein bißchen Hoffnung...
Habt ihr noch weitere Ideen?

von KOMA » Mi 24. Nov 2010, 14:20

Füge vor dem \singlespacing ein \par ein oder erweitere den basicstyle um \linespead{1}\selectfont oder \setspace{1}.

von ChrisPZV » Mi 24. Nov 2010, 13:58

Einen kleinen Bug habe ich in der Lösung doch noch gefunden, der im Minimalbeispiel nicht auftaucht: Die Wirkung des \singlespacing weitet sich manchmal auf den vorhergehenden ( ! ) Absatz aus, dessen Zeilen stehen dann auch näher beieinander. Das kann man erst einmal umgehen, wenn man einfach vor dem \begin{shell} eine Leerzeile im Quelltext einfügt. Genau das widerspricht aber ja dem Prinzip der Vereinfachung durch das neue Environment...

Ich habe versucht, das eleganter zu lösen, indem ich ein weiteres Environment um das \lstenvironment schachtele aber mit
\lstnewenvironment{lstshell}{
	\lstset{
		columns=fullflexible,
		language=bash,
		showstringspaces=false,
		basicstyle=\ttfamily,
		keywordstyle=\color{black},
		commentstyle=\color{black},
		stringstyle=\color{black},
		numbers=none,
		tabsize=4,
		breaklines=true,
		breakatwhitespace=true,
		frame=none}
}{}

\newenvironment{shell}{
	\singlespacing
	\begin{lstshell}
}
{
	\end{lstshell}
}
bin ich gescheitert. Der Compiler gibt mir damit einen "Emergency stop".
Ich nehme an, dass ich da auf das im oben verlinkten Thread beschriebene Problem stoße...

von ChrisPZV » Mi 24. Nov 2010, 12:08

Perfekt, das war die richtige Fährte!

Weil ich aber ebenso im Dokument auch Listings benutze und mir dafür mein eigenes Layout geschnitzt habe, bin ich natürlich nicht darauf gekommen. Die von dir gezeigte Lösung scheint sich aber mit meiner Listingskonfiguration zu vertragen, gelöst habe ich das ganze jetzt wie folgt:
\documentclass[10pt, a4paper]{article}            % 10pt schriftgröße, DIN A4, Artikel
\usepackage[a4paper,left=2.5cm,right=2cm,top=2.5cm,bottom=2.5cm]{geometry}
\linespread{1.5}                            % Zeilenabstand 1,5
\usepackage{setspace}                        % \singlesspacing | \onehalfspacing
\usepackage[ngerman]{babel}                     % deutsche rechtschreibprüfung/silbentrennung
\usepackage[ansinew]{inputenc}                     % utf8 codierte .tex dateien
\usepackage[T1]{fontenc}                     % korrekte umlaute im ausgabedokument
\usepackage[style=numeric-comp,hyperref]{biblatex}   % Literaturverzeichnis-Style
\usepackage{blindtext}
\usepackage{xcolor}
\usepackage{listings}

% mein setup f\"{u}r c/c++-Listings, darf nicht ver\"{a}ndert werden
\definecolor{darkblue}{rgb}{0,0,.75}
\definecolor{darkred}{rgb}{.75,0,0}
\definecolor{darkgreen}{rgb}{0,.75,0}
\definecolor{red}{rgb}{.98,0,0}

\lstset{
	language=C++,
	showstringspaces=false,
	basicstyle=\ttfamily\small,
	keywordstyle=\color{darkblue},
	commentstyle=\color{darkgreen},
	stringstyle=\color{darkred},
	numbers=left,
	tabsize=4,
	breaklines=true,
	breakatwhitespace= true,
	frame=tlrb
}


\lstnewenvironment{shell}{
	\singlespacing  
	\lstset{
		columns=fullflexible,
		language=bash,
		showstringspaces=false,
		basicstyle=\ttfamily,
		keywordstyle=\color{black},
		commentstyle=\color{black},
		stringstyle=\color{black},
		numbers=none,
		tabsize=4,
		breaklines=true,
		breakatwhitespace= true,
		frame=none
}
}{}

\begin{document}
\section{Meine Verbatimumgebung will nicht so wie ich wohl will}
Die folgende Shell-Ausgabe sollte nicht wie dieser Text hier mit 1,5-zeiligem Abstand erfolgen sondern mit einzeiligem Zeilenabstand. \blindtext

\begin{shell}
~ $ lsusb
Bus 002 Device 023: ID 0ac8:307b Z-Star Microelectronics Corp. USB 1.1 Webcam
Bus 002 Device 015: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
~ $
\end{shell}

\section{Vergleichslisting mit C/C++ - Code}
Hier mein listing:
\begin{lstlisting}[caption=Listing direkt im Quelltext]
/* Kommentar: eine for - Schleife */
for (unsigned char x = 0; x < BUFFERSIZE; x++) {
	if (x == 0) {
		fprintf(stdout, "data[%#4x] =\n", BUFFERSIZE);
	}
}
\end{lstlisting}
\blindtext
\end{document}
Ich musste nur in dem \lstenvironment Rahmen und Zeilennummern abstellen sowie die styles explizit auf Schwarz stellen, damit sie nicht die Einstellungen von meinem globalen \lstset erben und dann funktionert es. Übrigens besser als ich dachte, ich muss nicht einmal den Zeilenabstand nach dem env. zurücksetzen, das macht die Sache deutlich flexibler.
Tausend Dank!

P.S.: ich muss das package 'biblatex' mit einbinden, sonst:
This is BibTeX, Version 0.99c (TeX Live 2009/Debian)
The top-level auxiliary file: minimalbeispiel_verbatim_spacing.aux
I found no \citation commands---while reading file minimalbeispiel_verbatim_spacing.aux
I found no \bibdata command---while reading file minimalbeispiel_verbatim_spacing.aux
I found no \bibstyle command---while reading file minimalbeispiel_verbatim_spacing.aux
(There were 3 error messages)
:?:

von Xenara » Mi 24. Nov 2010, 11:20

Wie wärs mit dem listings-Paket statt verbatim? Damit kann man das ganz komfortabel machen:
\documentclass[10pt, a4paper]{article}            % 10pt schriftgröße, DIN A4, Artikel 
\usepackage[a4paper,left=2.5cm,right=2cm,top=2.5cm,bottom=2.5cm]{geometry} 
\linespread{1.5}                            % Zeilenabstand 1,5 
\usepackage{setspace}                        % \singlesspacing | \onehalfspacing 
\usepackage[ngerman]{babel}                     % deutsche rechtschreibprüfung/silbentrennung 
\usepackage[ansinew]{inputenc}                     % utf8 codierte .tex dateien 
\usepackage[T1]{fontenc}                     % korrekte umlaute im ausgabedokument 
%\usepackage[style=numeric-comp,hyperref]{biblatex}   % Literaturverzeichnis-Style 
\usepackage{blindtext} 
\usepackage{listings}

\lstnewenvironment{shell}{%
\singlespacing  
\lstset{columns=fullflexible, basicstyle=\ttfamily}%
}{%
\onehalfspacing
} 

\begin{document} 
\section{Meine Verbatimumgebung will nicht so wie ich wohl will} 
Die folgende Shell-Ausgabe sollte nicht wie dieser Text hier mit 1,5-zeiligem Abstand erfolgen sondern mit einzeiligem Zeilenabstand. \blindtext 

\begin{shell} 
~ $ lsusb 
Bus 002 Device 023: ID 0ac8:307b Z-Star Microelectronics Corp. USB 1.1 Webcam 
Bus 002 Device 015: ID 0e0f:0002 VMware, Inc. Virtual USB Hub 
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub 
~ $ 
\end{shell} 

\blindtext

\end{document}

Nach oben