PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Listing und Caption mit underschiedlicher Textbreite?



Loomes
30-06-2012, 16:14
Hallo, ich setze meine Listings aus kosmetischen Gründen auf 0.9 Textbreite mit
\begin{figure}[!htbp]
\begin{center}
\begin{minipage}{0.9\textwidth}
\begin{lstlisting} [language={[Sharp]C},frame=single,mathescape=false,firstnumber=1,cap tion={OpenCL C code can be set as a string in \Csharp. (...)},label={lis:openclintegration}]
... mycode ...
\end{lstlisting}
\end{minipage}
\end{center}
\end{figure}
Das Problem ist aber, dass damit natürlich die Captions ebenfalls auf 0.9 Breite gesetzt werden. Ich möchte jedoch die Captions auf 1.0, volle Textbreite, setzen. Nehme ich jedoch das Caption aus dem lstlisting, wird automatisch "Figure x" (ich schreibe in englisch) daraus. Gibt es eine Möglichkeit, das Listing als solches und die zugehörige Caption mit unterschiedlichen Textbreiten darzustellen? Danke.

klops
30-06-2012, 18:34
Da Du leider kein vollständiges Minimalbeispiel machst, fehlen Informationen wie die zur verwendeten Klasse. Hier einmal ein Vorschlag mit KOMA-Script:


\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{listings}
\usepackage{needspace}

\DeclareNewTOC[type=listing,listname={List of listings},float,nonfloat]{lst}
\newcommand\Csharp{``Ei-verbibsch! Ich hab' die Definition vergesst!''}
\begin{document}
\listoflistings

\section{Test}

\lipsum[1]
\begin{listing}[!htbp]
\centering
\captionabove{OpenCL C code can be set as a string in \Csharp. (...)}
\label{lis:openclintegration}
\begin{minipage}{0.9\textwidth}
\begin{lstlisting} [language={[Sharp]C},frame=single,mathescape=false,firstnumber=1]
... mycode ...
\end{lstlisting}
\end{minipage}
\end{listing}

\lipsum[2-3]

\needspace{5\baselineskip}
\begin{center}
\captionof{listing}{This is a listing, that does not float but with the
possibility of page breaks. Isn't this nice?}
\label{lis:pagebreak}
\begin{addmargin}{.05\textwidth}
\lstinputlisting{\jobname}
\end{addmargin}
\end{center}

\lipsum[4]

\begin{listing-}
\caption{Same as above, but without without page break}
\label{list:nopagebreak}
\begin{addmargin}{.05\textwidth}
\lstinputlisting{\jobname}
\end{addmargin}
\end{listing-}

\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:

Wenn man keine KOMA-Script-Klasse verwendet, muss man ggf. für \DeclareNewTOC das Paket tocbasic laden und für addmargin das Paket scrextend. Statt tocbasic und \DeclareNewTOC kann man auch zum caption-Paket greifen, das ebenfalls die Definition neuer Gleitumgebungen erlaubt. BTW: Option frame funktioniert im zweiten Beispiel nicht. Da muss man dann ggf. auf Paket wie mdframed o. ä. ausweichen, falls man unbedingt Kästen haben will.

Loomes
30-06-2012, 20:10
ach okay... man tauscht die figure umgebung durch eine listing umgebung aus und setzt dann das caption unter die minipage. vielen dank, hat sofort funktioniert, ich benutze auch komascript :)

hakaze
30-06-2012, 22:30
Das listings (http://ctan.org/pkg/listings)-Paket bietet auch direkt die Option die Breite des Listings anzupassen:
linewidth=⟨dimension ⟩ \linewidth

defines the base line width for listings. The following three keys are taken
into account additionally...Damit ist eine addmargin- oder minipage-Konstruktion eigentlich nicht nötig.

localghost
01-07-2012, 11:28
Hallo, ich setze meine Listings aus kosmetischen Gründen auf 0.9 Textbreite mit […]. Das Problem ist aber, dass damit natürlich die Captions ebenfalls auf 0.9 Breite gesetzt werden. Ich möchte jedoch die Captions auf 1.0, volle Textbreite, setzen. Nehme ich jedoch das Caption aus dem lstlisting, wird automatisch "Figure x" (ich schreibe in englisch) daraus. Gibt es eine Möglichkeit, das Listing als solches und die zugehörige Caption mit unterschiedlichen Textbreiten darzustellen? Danke.
Da schaut man mal in die Anleitung von listings (http://ctan.org/pkg/listings) und wird sofort in Abschnitt 4.10 fündig.

\documentclass[english]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
adieresis={ä},
germandbls={ß},
Euro={€},
}
\usepackage{babel}
\usepackage{listings}

\lstset{
basicstyle=\ttfamily,
xleftmargin=0.05\textwidth, % linker Rand
xrightmargin=0.05\textwidth % rechter Rand
}

\begin{document}
\begin{lstlisting}[
language={[Sharp]C},
gobble=4,
frame=single,
mathescape=false,
firstnumber=1,
captionpos=b,
caption={The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.},
label={lis:openclintegration},
float
]
class Program
{
public static void Main()
{
System.Console.WriteLine("Hallo Welt!");
}
}
\end{lstlisting}
\end{document}
Die Länge \linewidth wurde ja schon als weitere mögliche Stellschraube genannt.


Thorsten