PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : code schnippsel in tabelle



gerd123
08-09-2008, 13:56
Hallo,

ich versuche Code Schnipsel mit Hilfe des listings package in einer Tabelle (tabularx) zu setzen. Die erste Spalte soll soviel platz als nötig bekommen und die zweite Spalte (mit dem Listing) so breit sein, das die Tabelle die ganze Seitenbreite ausfüllt. Etwa so:


\newsavebox{\usrboxsmall}
\begin{lrbox}{\usrboxsmall}
\begin{lstlisting}[breaklines=true]
$x = 'a short string'
\end{lstlisting}
\end{lrbox}

\begin{tabularx}{\linewidth}{lX}\hline
\rowcolor[gray]{0.9} name & code\\ \hline
small id & \usebox{\usrboxsmall} \\ \hline
\end{tabularx}

Soweit ich verstanden habe kann ich bei tabularx das listing nicht direkt in der Tabelle setzen sondern muss es vorab in einer LR box setzen, nun habe ich aber bei etwas längeren Code Schnipseln das Problem das das listing in der LR box noch nicht weis wie breit die Tabellenspalte wird und das listing nicht richtig umgebrochen wird. Gibt es da irgendeinen Ausweg?

Vielen Dank
Gerhard

edico
08-09-2008, 17:57
Ich verstehe noch nicht, was Du wirklich willst ... könntest Du so etwas haben wollen, wie das lstxmpl package macht.
Ansonsten ist Dein Ansatz hier ggf. mit dem minipage environment 'einfacher' als mit tbx zu realisieren.



...
\begin{minipage}[t]{0.425\textwidth}\vspace{0pt}%
Text
\end{minipage}
\hspace{\fill}
\begin{minipage}[t]{0.525\textwidth}\vspace{0pt}%
CODE
\end{minipage}
...


edico

gerd123
09-09-2008, 07:07
Vielen Dank, für die info. Habe leider nicht angemerkt das ich viele solcher Tabellen habe, die linke Spalte enthält einen Namen/Beschreibung die rechte Spalte den Code. Die linke Spalte soll so breit wie nötig werden (aber nicht breiter) damit rechts möglichst viel Platz für den Code bleibt der durch das lstlisting wenn nötig umgebrochen wird.

Das Problem mit dem minipage Ansatz ist aus meiner Sicht, das der Abstand angepasst wird, aber nicht die Grösse der rechten Spalte maximiert wird (etwas ähnliches könnte ich durch Verwendung von tabular* statt tabularx erzielen).

lstxmpl hab ich auf CTAN nichtgefunden, gibt es dazu infos wo es zu finden ist und Doku welches der relavante Befehl ist?

Vielen Dank
gerhard

edico
09-09-2008, 13:16
lstxmpl hab ich auf CTAN ....

Ja, sorry, war eine falsche Erinnerung - das package, das auch auf dem Rechner liegen sollte, heisst:showexpl. Allerdings scheint es Dir wohl nicht in Deinem Fall eine Hilfe geben zu können.

Soweit ich Deinem Ansinnen folgen kann, hielte ich den minipage-Ansatz weiterhin für am geeignetsten, weil auch schlichtesten ... Und eine Lösung mit tabularx kann ich auch nicht zaubern. Allerdings habe ich mal mit tabular einen Lösungsansatz versucht, den ggf. weiterentwickeln kannst - insbesondere hinsichtlich der Vereinfachung durch Macros, was diesbezüglich nicht zu kompliziert sein sollte):



\documentclass[paper=a4,pagesize,DIV13,10pt,german]{scrartcl}
\usepackage{showframe}

\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{listings,showexpl}
\usepackage{xcolor}
\usepackage{tabularx,calc}
\parindent0pt

\begin{document}

\subsubsection*{tabular + lstlistings}
Die Seite hat die Textbreite:\,\the\textwidth, die sich jeweils aus der Addition von
Namens- und Spaltenbreite zusammensetzt.

\bigskip
\newlength\NAME
\settowidth{\NAME}{Name}
Namensbreite:\,\the\NAME% nur_zur_Demo

\begin{tabular}{@{} lp{\textwidth-\NAME}}
Name&
\begin{minipage}[t]{\linewidth}Spaltenbreite:\,\the\linewidth -- % nur_zur_Demo
\begin{lstlisting}[breaklines=true,basicstyle=\small\ttfamily]
$x$ = 'a short string'
\end{lstlisting}
\end{minipage} \\
\end{tabular}


\newlength\NAMEI
\settowidth{\NAMEI}{Der Name ist Schall und Rauch}
Namensbreite:\,\the\NAMEI% nur_zur_Demo

\begin{tabular}{@{}lp{\textwidth-\NAMEI}}
Der Name ist Schall und Rauch&
\begin{minipage}[t]{\linewidth}Spaltenbreite:\,\the\linewidth -- % nur_zur_Demo
\begin{lstlisting}[breaklines=true,basicstyle=\small\ttfamily]
$x$ = 'a not so short but never ending and very long string'
\end{lstlisting}
\end{minipage} \\
\end{tabular}

\end{document}


Vielleicht kannst Du damit weiterkommen ...

edico

gerd123
10-09-2008, 15:21
Vielen Dank, ich denke dieser Ansatz sollte funktionieren.

Vielen Dank
Gerhard