PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Caption-Package und Listings mit Caption oberhalb: Abstand falsch



sharpType
08-09-2009, 19:21
Hallo nochmal,

ich hab schon wieder ein seltsames Problem:

Dank des Tipps von Ulrike ändere ich jetzt alle meine Captions von den Listings und positioniere sie oberhalb der listings. Dummerweise habe ich die meisten meiner Listings (bzw sie müssen auch dort sein) in einer description umgebung.

Nun ist der Abstand in der description-umgebung anders als vor der umgebung (s. minibeispiel)? :mad:

der grund liegt beim caption-paket, aber das brauche ich...formatierungen mit dem caption paket haben auch nichts gebracht, aber in der doku steht das das kompatibel sein soll.

kann man da was machen? ich rutsche langsam echt von einem problem ins nächste. grauenvoll..:(





\documentclass[pdftex,
final,
10pt,
numbers=noenddot,
a4paper,
pagesize,
oneside,
ngerman,
parskip=full-]{scrreprt}

\usepackage[svgnames]{xcolor}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{caption}
\usepackage{scrhack}
\usepackage{listings}


\captionsetup{font=small, format=hang, justification=justified, labelsep=colon, labelformat=simple, singlelinecheck = true}
\captionsetup[lstlisting]{labelfont=bf,textfont=sc}


\usepackage[left=2.8cm,right=1.75cm,top=2.25cm,bottom=2.25cm]{geometry}


\lstset{%
language=[Sharp]C, % Sprache des Quellcodes ist Java
numbers=left,
stepnumber=1, % Jede Zeile nummerieren.
numbersep=5pt, % 5pt Abstand zum Quellcode
numberstyle=\tiny, % Zeichengrösse 'tiny' für die Nummern.
breaklines=true, % Zeilen umbrechen wenn notwendig.
breakautoindent=true, % Nach dem Zeilenumbruch Zeile einrücken.
numberblanklines=false,
postbreak=\space, % Bei Leerzeichen umbrechen.
tabsize=2, % Tabulatorgrösse 2
basicstyle=\ttfamily\scriptsize, % Nichtproportionale Schrift, klein für den Quellcode
showspaces=false, % Leerzeichen nicht anzeigen.
showstringspaces=false, % Leerzeichen auch in Strings ('') nicht anzeigen.
extendedchars=true, % Alle Zeichen vom Latin1 Zeichensatz anzeigen.
framexleftmargin=5mm,
frame=shadowbox,
rulesepcolor=\color{Red}
}


\begin{document}
\chapter{Hauptteil}

\section{Section}
Test text

\begin{lstlisting}[caption=Titel des Codes, label=lst, captionpos=t]
private void hideAllPlyBodies()
{
foreach (HybridBody body in plyBodies)
{
hideElement(body, partDocument2);
}

foreach (HybridBody body in plyBodiesTriangularResults)
{
hideElement(body, partDocument2);
}
}
\end{lstlisting}

\begin{description}
\item[Test] Test text hier test text hiervest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hierest text hier test text hier

\begin{lstlisting}[caption=Titel des Codes, label=lst, captionpos=t]
private void hideAllPlyBodies()
{
foreach (HybridBody body in plyBodies)
{
hideElement(body, partDocument2);
}

foreach (HybridBody body in plyBodiesTriangularResults)
{
hideElement(body, partDocument2);
}
}
\end{lstlisting}

das ist der Text danach

\end{description}

\end{document}



Hoffe mir kann da jmd bei helfen...

mechanicus
08-09-2009, 21:19
Hallo,

schaue nochmal in die Doku zu caption texdoc caption-de. Hier findest du deine Antwort auf Seite 39.

Du hast also die Möglichkeit:

\lstset{%
captionpos=top,
belowcaptionskip=10pt,
}

oder

\captionsetup[lstlisting]{position=top,skip=10pt}

Gruß
Marco

sharpType
08-09-2009, 22:00
Das führt beides nicht zum gewünschten Erfolg, das war ja auch meine erste Idee. In der description ist immer ein anderer Abstand als im normalen Text bei den Listings

sharpType
08-09-2009, 23:22
Eine Lösung dazu habe ich gefunden: mal wieder eine minipage drum herum packen.

Allerdings zerstört diese Lösung mein ganzes Layout :(, weil das Listing denn nicht mehr getrennt wird, wenn es an ein Seitenende stößt.

Hat denn sonst niemand eine Idee, wie man die blöde Caption oberhalb vernünftig mit dem Abstand bekommt und diese trotzdem am Seitenende ggf. trennt? :o


Bin für jeden Tip echt sehr dankbar....:o

u_fischer
09-09-2009, 10:21
Verschwende nicht soviel Zeit selbst Lösungen zu finden. Wenn du nach einer angemessenen Suche in der Dokumentation und einigen Versuchen nicht weiterkommst, halt an und wende dich der Erstellung eines guten Minimalbeispiels zu und einer vernünftigen Problembeschreibung zu, dann lass andere arbeiten.

In diesem Fall ist es eindeutig, dass der Abstand durch caption verursacht wird. Und irgendwas im minipage-Code kann das Problem lösen. Das führt dann zu dieser vorläufigen Lösung (mit einer endgültigen Lösung, falls es eine gibt, kann sich Axel rumschlagen):


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

\begin{document}
Test text
\begin{lstlisting}[caption=Titel des Codes, captionpos=t]
private void hideAllPlyBodies()
\end{lstlisting}

\begin{description}
\item[Test] Test text hier test text hiervest text hier test text hierest text

\begingroup
\makeatletter
\let\par\@@par
\makeatother
\begin{lstlisting}[caption=Titel des Codes,captionpos=t]
private void hideAllPlyBodies()
\end{lstlisting}
\endgroup


das ist der Text danach

\end{description}
\end{document}

sharpType
09-09-2009, 10:38
:eek: super!! das funktioniert ja echt. Was macht denn der code? hoffentlich hat das kein einfluss auf andere dinge, wenn ich das jetzt einbaue. ich hab im moment nur probleme ich weiß auch nciht und ich hab auch schon voll das schlechte gewissen, das ich hier ständig meine probleme poste *schäm*

ich bin so dankbar das einem hier so gut geholfen wird, das ist echt lobenswert! ich wollte gerade schon wieder ein problem posten, was damit zusammenhängt. denn ich habe, zum glück, meine listsings alle in eine von mir extra definierte umgebung gepackt, das ich das global anpassen kann und meine 200 listigns jetzt nich per hand ändern muss.

daher werde ich mal versuchen den code von eben in eine lstenvironment zu bauen. hoffe das geht?

ich hatte eine andere lösung, jedoch ohne umbruch in den listings, was dann wieder das layout zerstört aber dadurch kam ein anderes warscheinlich einfach zu behebendes problem auf. ich habe die minipage in eine lstenvironment eingebaut udn dann kam das nachfolgende minibsp raus und dabei viel mir auf, das die minipage irgendwie einen abstand zwischen dem text vor dem listing und dem listing selbst macht, jedoch nur bei der minipage.





\documentclass[pdftex,
final,
10pt,
numbers=noenddot,
a4paper,
pagesize,
oneside,
ngerman,
parskip=full-]{scrreprt}

\usepackage[svgnames]{xcolor}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{caption}
\usepackage{scrhack}
\usepackage{listings}


\captionsetup{font=small, format=hang, justification=justified, labelsep=colon, labelformat=simple, singlelinecheck = true}
\captionsetup[lstlisting]{labelfont=bf,textfont=sc}


\usepackage[left=2.8cm,right=1.75cm,top=2.25cm,bottom=2.25cm]{geometry}


\lstdefinestyle{CSharp}{
language=[Sharp]C, % Sprache des Quellcodes ist Java
keywordstyle=\bfseries\color{DarkBlue}, % Farbe für die Keywords wie public, void, object u.s.w.
commentstyle=\color{DarkGreen}, % Farbe der Kommentare
stringstyle=\color{FireBrick}, % Farbe der Zeichenketten
numbers=left,
stepnumber=1, % Jede Zeile nummerieren.
numbersep=5pt, % 5pt Abstand zum Quellcode
numberstyle=\tiny, % Zeichengrösse 'tiny' für die Nummern.
breaklines=true, % Zeilen umbrechen wenn notwendig.
breakautoindent=true, % Nach dem Zeilenumbruch Zeile einrücken.
numberblanklines=false,
postbreak=\space, % Bei Leerzeichen umbrechen.
tabsize=2, % Tabulatorgrösse 2
basicstyle=\ttfamily\scriptsize, % Nichtproportionale Schrift, klein für den Quellcode
showspaces=false, % Leerzeichen nicht anzeigen.
showstringspaces=false, % Leerzeichen auch in Strings ('') nicht anzeigen.
extendedchars=true, % Alle Zeichen vom Latin1 Zeichensatz anzeigen.
framexleftmargin=5mm,
frame=shadowbox,
rulesepcolor=\color{DarkBlue},
}


\lstnewenvironment{csharp}[2]
{
\lstset{style=CSharp, caption=#1, label=#2, captionpos=b, abovecaptionskip=0.5em}
}
{
}

\lstnewenvironment{minicsharp}[2]
{
\lstset{style=CSharp, caption=#1, label=#2, captionpos=b, abovecaptionskip=0.5em}
\minipage{\linewidth}
}
{
\endminipage
}


\begin{document}
\chapter{Hauptteil}
\section{Section}
Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec

\begin{minicsharp}{Methode: \texttt{hideAllPlyBodies} -- Ausblendung (\emph{noShow}) aller geometrischen Sets der Lagengeometrien inkl. der \emph{Triangular-Results}}{lst:hideAllPlyBodies}
private void hideAllPlyBodies()
{
foreach (HybridBody body in plyBodies)
{
hideElement(body, partDocument2);
}

foreach (HybridBody body in plyBodiesTriangularResults)
{
hideElement(body, partDocument2);
}
}
\end{minicsharp}

Die Ein- und Ausblendung von Elementen wird über eine \emph{Selection} realisiert. Diese hat ein spezifische \emph{VisProperties}, die über das \emph{VisPropertySet} angesprochen werden können und mit entsprechenden Parameterkonstanten an die Metu einer Ein- bzw. Ausblendung des Elementes führen.

\begin{csharp}{Methode: XXX}{lst:hideElement}
private void hideElement(AnyObject element, PartDocument partDoc)
{
Selection mySel = partDoc.Selection;
mySel.Clear();
mySel.Add(element);
VisPropertySet myVisSet = mySel.VisProperties;
myVisSet.SetShow(CatVisPropertyShow.catVisProperty NoShowAttr);
mySel.Clear();
}
\end{csharp}

Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec
\end{document}

sharpType
09-09-2009, 10:40
hier das bild dazu, damit man weiß , was ich meine

achja und Axel habe ich schon mal kontaktiert und ihm eine private nachricht geschrieben. es scheint ja grundsätzlich ein problem mit listings in einer description zu geben, hatte ja auch das problem mit dem text der über die linewidth schreibt.

das konnte ich ja auch nur mit einer minipage lösen, wo wir wieder bei dem layout problem wären.

oder behebt der code, den du gerade gepostet hast auch das mit der überlangen caption?? das wäre ja super

sharpType
09-09-2009, 10:48
okay ich muss da noch etwas berichten: das mit dem umbruch, wenn die caption zu lang ist in einer description scheint nicht aufzutauchen, das heißt sie wird richtig umgebrochen, wenn die caption oberhalb ist *erstaunt ist*

ich weiß jetzt nicht ob der code von dir oben nur für die listings ist oder eher für die description:

habe versucht den mal so einzubauen, das ich nicht bei jedem listing den code schreiben muss, aber da bekomme ich 17 fehler. oder müsste ich die description umgebung umdefinieren?

dieser fehler mit den captions taucht komischerweise auch nicht in jeder description auf sondern nur in bestimmten abschnitten meines dokuemntes. manchmal ist die caption oberhalb auch mit passendem abstand vorhande, keine ahnung warum. das ist ganz komisch.



\lstnewenvironment{minicsharp}[2]
{
\begingroup
\makeatletter
\let\par\@@par
\makeatother
\lstset{style=CSharp, caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em}
}
{
\endgroup
}

u_fischer
09-09-2009, 11:35
Das \makeatletter gehört vor \lstnewenvironment, \makeatother danach.

Abgesehen davon: Deine Probleme lösen sich nicht schneller, wenn du alle fünf Minuten eine neue Wasserstandsmeldung rausschickst. Besonders dann nicht, wenn diese im Wesentlichen aus Selbstgesprächen und Codeschnipseln bestehen. Was z.B. bitte sollen wir mit der Aussage "aber da bekomme ich 17 fehler" anfangen? Es wäre auch nett, wenn du ein wenig an deiner Rechtschreibung arbeiten würdest. Ein paar mehr Kommas und etwas Groß- und Kleinschreibung erleichtern das Lesen sehr.

sharpType
09-09-2009, 12:20
Für die magere Rechtschreibung muss ich mich tatsächlich mal entschuldigen :o. Ich hoffe jetzt ist es etwas besser :).

Ich bekomme diesen Codeteil einfach nicht in die minicsharp lstenvironment (siehe auskommentierter Code im Minimalbeispiel).



\makeatletter
\lstnewenvironment{minicsharp}[2]
{
\begingroup
\let\par\@@par
\lstset{style=CSharp, caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em}
}
{
\endgroup
}
\makeatother


Das angehängte minimalbeispiel behebt auch den Fehler, dass zu lange Captions in den Rand geschrieben werden, allerdings wird der Beginn der Caption (Listing 1.X) nun nicht mehr gemäß der description-Umgebung eingerückt, sondern nutzt immer die gesamte \textwidth.

Was macht der Codeteil überhaupt genau? Wäre es gefährlich, wenn ich diesen für alle Listingsumgebungen einbaue, da der Fehler mit den Captions ja nicht überall auftaucht, sondern nur in bestimmten Beschreibungslisten.

Vielen danke schon mal für deine Mühen, aber das Problem ärgert mich einfach total.

Minibeispiel:



\documentclass[pdftex,
final,
10pt,
numbers=noenddot,
a4paper,
pagesize,
oneside,
ngerman,
parskip=full-]{scrreprt}

\usepackage[svgnames]{xcolor}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{caption}
\usepackage{scrhack}
\usepackage{listings}


\captionsetup{font=small, format=hang, justification=justified, labelsep=colon, labelformat=simple, singlelinecheck = true}
\captionsetup[lstlisting]{labelfont=bf,textfont=sc}


\usepackage[left=2.8cm,right=1.75cm,top=2.25cm,bottom=2.25cm]{geometry}


\lstdefinestyle{CSharp}{
language=[Sharp]C, % Sprache des Quellcodes ist Java
keywordstyle=\bfseries\color{DarkBlue}, % Farbe für die Keywords wie public, void, object u.s.w.
commentstyle=\color{DarkGreen}, % Farbe der Kommentare
stringstyle=\color{FireBrick}, % Farbe der Zeichenketten
numbers=left,
stepnumber=1, % Jede Zeile nummerieren.
numbersep=5pt, % 5pt Abstand zum Quellcode
numberstyle=\tiny, % Zeichengrösse 'tiny' für die Nummern.
breaklines=true, % Zeilen umbrechen wenn notwendig.
breakautoindent=true, % Nach dem Zeilenumbruch Zeile einrücken.
numberblanklines=false,
postbreak=\space, % Bei Leerzeichen umbrechen.
tabsize=2, % Tabulatorgrösse 2
basicstyle=\ttfamily\scriptsize, % Nichtproportionale Schrift, klein für den Quellcode
showspaces=false, % Leerzeichen nicht anzeigen.
showstringspaces=false, % Leerzeichen auch in Strings ('') nicht anzeigen.
extendedchars=true, % Alle Zeichen vom Latin1 Zeichensatz anzeigen.
framexleftmargin=5mm,
frame=shadowbox,
rulesepcolor=\color{DarkBlue},
}


\lstnewenvironment{csharp}[2]
{
\lstset{style=CSharp, caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em}
}
{
}

%\makeatletter
%\lstnewenvironment{minicsharp}[2]
%{
% \begingroup
% \let\par\@@par
% \lstset{style=CSharp, caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em}
%}
%{
% \endgroup
%}
%\makeatother



\begin{document}
\chapter{Hauptteil}
\section{Section}
Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec

\begin{csharp}{Methode: \texttt{hideAllPlyBodies} -- Ausblendung (\emph{noShow}) aller geometrischen Sets der Lagengeometrien inkl. der \emph{Triangular-Results}}{lst:hideAllPlyBodies}
private void hideAllPlyBodies()
{
foreach (HybridBody body in plyBodies)
{
hideElement(body, partDocument2);
}

foreach (HybridBody body in plyBodiesTriangularResults)
{
hideElement(body, partDocument2);
}
}
\end{csharp}
\begin{description}
\item[test] bla bla

Die Ein- und Ausblendung von Elementen wird über eine \emph{Selection} realisiert. Diese hat ein spezifische \emph{VisProperties}, die über das \emph{VisPropertySet} angesprochen werden können und mit entsprechenden Parameterkonstanten an die Metu einer Ein- bzw. Ausblendung des Elementes führen.

\begin{description}
\item[test] bla bla

\begingroup
\makeatletter
\let\par\@@par
\makeatother

\begin{csharp}{Methode: sehr sehr lange beschreibung um herauszufinden ob der text wieder über den rand herausgeschrieben wird oder nicht}{lst:hideElement}
private void hideElement(AnyObject element, PartDocument partDoc)
{
Selection mySel = partDoc.Selection;
mySel.Clear();
mySel.Add(element);
VisPropertySet myVisSet = mySel.VisProperties;
myVisSet.SetShow(CatVisPropertyShow.catVisProperty NoShowAttr);
mySel.Clear();
}
\end{csharp}
\endgroup

\end{description}

Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec Test text tec

\end{description}
\end{document}

u_fischer
09-09-2009, 13:09
Versuch sowas:


\makeatletter
\newcommand\resetparinlisting{\let\par\@@par}

\lstnewenvironment{minicsharp}[2] {%
\resetparinlisting
\lstset{caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em}
}{}
\makeatother

sharpType
09-09-2009, 13:26
Ich danke dir für die Hilfe, das mit der Environment klappt, jedoch bestehen die anderen Probleme nach wie vor (s. Anhang und miniBsp). Ich denke mal dafür gibt es keine Lösung mehr? :confused:

Ich könnte die Captions doch wieder unterhalb der Listings setzen, dann wären "nur" die Seitenzahlen bei Listings die über ein Seitenende gehen um eine Seite verrutscht.

Den Befehl, der scheinbar am Anfang jedes Listings steht, um die Seitenzahl ins TOC zu schreiben, kann man den nicht umdefinieren, das dieser am Ende des Listings stehen soll bzw. da, wo auch die Caption ist? Wäre doch viel logischer, da man die Caption doch variieren kann (sogar mit dem Listings-Paket von Hause aus). Das ist irgendwie alles bisschen komisch. So ein Mist :(



\documentclass[pdftex,
final,
10pt,
numbers=noenddot,
a4paper,
pagesize,
oneside,
ngerman,
parskip=full-]{scrreprt}

\usepackage[svgnames]{xcolor}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{caption}
\usepackage{scrhack}
\usepackage{listings}


\captionsetup{font=small, format=hang, justification=justified, labelsep=colon, labelformat=simple, singlelinecheck = true}
\captionsetup[lstlisting]{labelfont=bf,textfont=sc}


\usepackage[left=2.8cm,right=1.75cm,top=2.25cm,bottom=2.25cm]{geometry}


\lstdefinestyle{CSharp}{
language=[Sharp]C, % Sprache des Quellcodes ist Java
keywordstyle=\bfseries\color{DarkBlue}, % Farbe für die Keywords wie public, void, object u.s.w.
commentstyle=\color{DarkGreen}, % Farbe der Kommentare
stringstyle=\color{FireBrick}, % Farbe der Zeichenketten
numbers=left,
stepnumber=1, % Jede Zeile nummerieren.
numbersep=5pt, % 5pt Abstand zum Quellcode
numberstyle=\tiny, % Zeichengrösse 'tiny' für die Nummern.
breaklines=true, % Zeilen umbrechen wenn notwendig.
breakautoindent=true, % Nach dem Zeilenumbruch Zeile einrücken.
numberblanklines=false,
postbreak=\space, % Bei Leerzeichen umbrechen.
tabsize=2, % Tabulatorgrösse 2
basicstyle=\ttfamily\scriptsize, % Nichtproportionale Schrift, klein für den Quellcode
showspaces=false, % Leerzeichen nicht anzeigen.
showstringspaces=false, % Leerzeichen auch in Strings ('') nicht anzeigen.
extendedchars=true, % Alle Zeichen vom Latin1 Zeichensatz anzeigen.
framexleftmargin=5mm,
frame=shadowbox,
rulesepcolor=\color{DarkBlue},
}


\lstnewenvironment{csharp}[2]
{
\lstset{style=CSharp, caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em}
}
{
}


\makeatletter
\newcommand\resetparinlisting{\let\par\@@par}

\lstnewenvironment{minicsharp}[2] {%
\resetparinlisting
\lstset{caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em, style=CSharp}
}{}
\makeatother



\begin{document}
\chapter{Hauptteil}
\section{Section}
Testtext im Hauptteil.

\begin{csharp}{Methode: \texttt{hideAllPlyBodies} -- Ausblendung (\emph{noShow}) aller geometrischen Sets der Lagengeometrien inkl. der \emph{Triangular-Results}}{lst:hideAllPlyBodies}
private void hideAllPlyBodies()
{
foreach (HybridBody body in plyBodies)
{
hideElement(body, partDocument2);
}

foreach (HybridBody body in plyBodiesTriangularResults)
{
hideElement(body, partDocument2);
}
}
\end{csharp}

Testtext danach, im Hauptteil.

\begin{description}
\item[test] Beschreibungsliste 1

\begin{description}
\item[test] Beschreibungsliste 2 und Text vor dem Listing in der Beschreibungsliste 2.

\begin{minicsharp}{Methode: sehr sehr lange beschreibung um herauszufinden ob der text wieder über den rand herausgeschrieben wird oder nicht}{lst:hideElement}
private void hideElement(AnyObject element, PartDocument partDoc)
{
Selection mySel = partDoc.Selection;
mySel.Clear();
mySel.Add(element);
VisPropertySet myVisSet = mySel.VisProperties;
myVisSet.SetShow(CatVisPropertyShow.catVisProperty NoShowAttr);
mySel.Clear();
}
\end{minicsharp}

Text nach dem Listing in der Beschreibungsliste 2.

\end{description}

Text nach der Beschreibungsliste 2

\end{description}

Text nach allen Beschreibungslisten.
\end{document}

u_fischer
09-09-2009, 14:17
Du kannst doch die Ränder lokal ändern. Z.B. für die zweite Ebene:


\lstnewenvironment{minicsharp}[2] {%
\captionsetup{margin={\dimexpr\leftmargini+\leftma rginii,\rightmargin}}%
\resetparinlisting
\lstset{caption=#1, label=#2, xleftmargin=\dimexpr\leftmargini+\leftmarginii, xrightmargin=\rightmargin,captionpos=t, abovecaptionskip=0.5em, style=CSharp}
}{}
\makeatother

sharpType
09-09-2009, 15:19
Okay danke dir, jetzt ist es fast geschafft:

Jetzt hab ich nur noch ein (kleines) Problem und eine Frage.

Das MiniBsp (s. Anhang) hat nun alles eingebaut und ich habe es mal auf eine description runtergeschraubt, so wie es bei mir im Doc vorkommt. Die Caption von dem Listing scheint mit

margin={\dimexpr\leftmargini,\rightmargin}

den linken Rand von der description zu verstehen. Sie ist da, wo auch der Text von der description beginnt. Soweit so gut. Bei dem Listing selbst musste ich aber mit

xleftmargin=\dimexpr\leftmargini-28pt

den Wert (experimentell) -28pt hinzufügen, damit das ganze so annähernd aussieht, wie in dem listing dadrüber, außerhalb der description. Kann man diesen Wert auch mittels Variable exakt setzen? Konstanten sind ja nie so wirklich gut.


Dann die Frage:

Kann ich mit der Defintion:




\makeatletter
\newcommand\resetparinlisting{\let\par\@@par}

\lstnewenvironment{minicsharp}[2] {%
\captionsetup{margin={\dimexpr\leftmargini,\rightm argin}}%
\resetparinlisting
\lstset{caption=#1, label=#2, xleftmargin=\dimexpr\leftmargini-28pt, xrightmargin=\dimexpr\rightmargin,captionpos=t, abovecaptionskip=0.5em, style=CSharp}
}{}

\makeatother


die listingsEnv minicsharp nutzen, ohne das die Abstandseinstellung den Rest des Dokumentes betrifft, sprich ist die interne LatexBefehl-Änderung lokal auf alle Listings mit minicsharp begrenzt? Hab Angst, das dadurch irgendwas geschrottet wird, was ich nicht so schnell sehe. Oder anders: Worauf muss ich aufpassen?


ich danke Dir erneut!



\documentclass[pdftex,
final,
10pt,
numbers=noenddot,
a4paper,
pagesize,
oneside,
ngerman,
parskip=full-]{scrreprt}

\usepackage[svgnames]{xcolor}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{caption}
\usepackage{scrhack}
\usepackage{listings}
\usepackage{calc}


\captionsetup{font=small, format=hang, justification=raggedright, labelsep=colon, labelformat=simple, singlelinecheck = true}
\captionsetup[lstlisting]{labelfont=bf,textfont=sc}


\usepackage[left=2.8cm,right=1.75cm,top=2.25cm,bottom=2.25cm]{geometry}


\lstdefinestyle{CSharp}{
language=[Sharp]C, % Sprache des Quellcodes ist Java
keywordstyle=\bfseries\color{DarkBlue}, % Farbe für die Keywords wie public, void, object u.s.w.
commentstyle=\color{DarkGreen}, % Farbe der Kommentare
stringstyle=\color{FireBrick}, % Farbe der Zeichenketten
numbers=left,
stepnumber=1, % Jede Zeile nummerieren.
numbersep=5pt, % 5pt Abstand zum Quellcode
numberstyle=\tiny, % Zeichengrösse 'tiny' für die Nummern.
breaklines=true, % Zeilen umbrechen wenn notwendig.
breakautoindent=true, % Nach dem Zeilenumbruch Zeile einrücken.
numberblanklines=false,
postbreak=\space, % Bei Leerzeichen umbrechen.
tabsize=2, % Tabulatorgrösse 2
basicstyle=\ttfamily\scriptsize, % Nichtproportionale Schrift, klein für den Quellcode
showspaces=false, % Leerzeichen nicht anzeigen.
showstringspaces=false, % Leerzeichen auch in Strings ('') nicht anzeigen.
extendedchars=true, % Alle Zeichen vom Latin1 Zeichensatz anzeigen.
framexleftmargin=5mm,
frame=shadowbox,
rulesepcolor=\color{DarkBlue},
}


\lstnewenvironment{csharp}[2]
{
\lstset{style=CSharp, caption=#1, label=#2, captionpos=t, abovecaptionskip=0.5em}
}
{
}


\makeatletter
\newcommand\resetparinlisting{\let\par\@@par}

\lstnewenvironment{minicsharp}[2] {%
\captionsetup{margin={\dimexpr\leftmargini,\rightm argin}}%
\resetparinlisting
\lstset{caption=#1, label=#2, xleftmargin=\dimexpr\leftmargini-28pt, xrightmargin=\dimexpr\rightmargin,captionpos=t, abovecaptionskip=0.5em, style=CSharp}
}{}

\makeatother


\begin{document}
\chapter{Hauptteil}
\section{Section}
Testtext im Hauptteil.

\begin{csharp}{Methode: \texttt{hideAllPlyBodies} -- Ausblendung (\emph{noShow}) aller geometrischen Sets der Lagengeometrien inkl. der \emph{Triangular-Results}}{lst:hideAllPlyBodies}
private void hideAllPlyBodies()
{
foreach (HybridBody body in plyBodies)
{
hideElement(body, partDocument2);
}

foreach (HybridBody body in plyBodiesTriangularResults)
{
hideElement(body, partDocument2);
}
}
\end{csharp}

Testtext danach, im Hauptteil.

\begin{description}
\item[test] Das ist der erste Eintrag in der Beschreibungsliste. Auch hier wird viel Text geschreiben, um zu schauen, ob der Text richtig sitzt und ob auch alles gut aussieht. Wenn das nicht der Fall ist, wird das LayOut damit beeinflusst und alle sind traurig.

\begin{minicsharp}{Methode: sehr sehr lange beschreibung um herauszufinden ob der text wieder über den rand herausgeschrieben wird oder nicht}{lst:hideElement}
private void hideElement(AnyObject element, PartDocument partDoc)
{
Selection mySel = partDoc.Selection;
mySel.Clear();
mySel.Add(element);
VisPropertySet myVisSet = mySel.VisProperties;
myVisSet.SetShow(CatVisPropertyShow.catVisProperty NoShowAttr);
mySel.Clear();
}
\end{minicsharp}

Das ist der erste Eintrag in der Beschreibungsliste. Auch hier wird viel Text geschreiben, um zu schauen, ob der Text richtig sitzt und ob auch alles gut aussieht. Wenn das nicht der Fall ist, wird das LayOut damit beeinflusst und alle sind traurig.

\end{description}

Text nach allen Beschreibungslisten.
\end{document}

u_fischer
09-09-2009, 15:33
Ich würde mal sagen, du willst xleftmargin gar nicht ändern.

Und: minicshap bildet eine Gruppe.

sharpType
09-09-2009, 16:52
:eek: natürlich! *an den kopf fass*

Ist das schön! Es funktioniert *freu*. Was für eine schwere Geburt.

Ich danke Dir Ulrike! :)

sommerfee
09-09-2009, 19:46
(mit einer endgültigen Lösung, falls es eine gibt, kann sich Axel rumschlagen)

Ich habe es mir gerade mal angeschaut, leider ist es nicht so einfach/schnell für mich lösbar. Irgendwie kommt das listing-Paket nicht unter allen Umständen mit dem Code des caption-Paketes klar. Dabei verlässt es sich auf gewisse Verhaltensweisen der Standardklassen, die ich einfach nicht so nachbilden kann, weil das caption-Paket aufgrund der Optionsvielfalt manche Sachen einfach anders machen muß. (Davon ab ist das Verhalten der Originalroutine inkonsistent).

Wenn ich Zeit dafür finde (das wird leider nicht in den nächsten Wochen sein), werde ich einen Patch des listings-Paketes dafür basteln und wieder laut geben, in der Hoffnung, daß dann das Verhalten des caption-Paketes auch unter solchen Randbedingungen kompatibler sein wird.

Der Workaround von Ulrike muß also erstmal reichen, sorry. (An dieser Stelle ein dickes Dankeschön an Ulrike!)

Liebe Grüße,
Axel

sharpType
09-09-2009, 21:21
klingt kompliziert, aber die lösung von ulrike funktioniert erstmal ganz gut...bin auch sehr dankbar...:)