PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (Mehrseitige) Tabelle mit lstlisting als Inhalt?



maceop
10-09-2007, 18:16
Hallo,
ich benutze momentan longtable für mehrseitige Tabellen. Das funktioniert auch ohne Probleme. Allerdings taucht ein Problem bei einer Tabelle mit zwei Spalten auf. Links steht ein Wert und rechts soll Quelltext dazu erscheinen. Für die Darstellung des Quelltextes verwende ich \begin{lstlisting}...\end{lstlisting}. Allerdings kann ich die lstlisting umgebung nicht in der tabelle verwenden.

Gibt es eine Möglichkeit die Umgebung in einer (mehrseitigen) Tabelle zu verwenden?

edico
11-09-2007, 09:47
Zunaechst wollte ich Dich fragen, warum das bei Dir nicht klappt, bis ich dann merkte, dass ich einmal mehr um die Ecke denken muss:
Du meinst, dass das listings und nicht eben nur die Tabelle sich ueber mehrere Seiten erstreckt, was aus Deiner Beschreibung nicht zwingend hervorgeht, ich aber nun unterstelle.

AFAIK laesst longtable keinen Seitenumbruch innerhalb einer Zelle zu, was aber notwendig waere, da das listings sich ueber 2 o.m. Seiten erstrecken kann. Insofern waere eine Loseung nur zu suchen in einem manuellen 'splitting' des listings-Textes selbst. Dies kann allerdings dann muehsam werden, wenn es sich um 'viele' solcher Aktionen handelt.

Ich weiss nicht genau, ob supertabular 'mehr' kann. Ich weiss, es gibt eine allerdings auch manuelle Moeglichkeit innerhalb eines Textes einen Umbruch zu provozieren. Ob das bei listings funktioniert, wage ich zu bezweifeln, da (wohl sicherlich) der eingefuegte Command als Code und nicht als Command aufgefasst werde wuerde ...

Die Loesung liegt IMO im 'parallel' package (wenn ueberhaupt es so 'kompliziert' werden muss und der 'lstexpm style' nicht zum Tragen kommen koennte).
Ein Minimalbespiel zeigt den Ansatz (evtl. Anpassungen an eigene Bedarfe werden notwendig sein):

\documentclass[10pt]{article}
\usepackage{geometry}
\geometry{paperwidth=297.3mm,paperheight=210.2mm}

\usepackage{parallel,calc}

%\usepackage{lstxmpl}
\usepackage{listings}
\lstset{basicstyle=\footnotesize,frame=tb,
numbers=left,
numberstyle=\tiny, stepnumber=2, numbersep=10pt,
xleftmargin=.3\textwidth,
}%

\begin{document}

\begin{Parallel}[v]{.2\textwidth}{.7\textwidth}
\ParallelLText{%
Codesnippet 'listings.sty'
}
\ParallelRText{%
\small
\begin{lstlisting}{}
%% This is file `listings.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% listings-1.3.dtx (with options: `kernel')
%%
%% Please read the software license in listings-1.3.dtx or listings-1.3.pdf.
%%
%% (w)(c) 1996--2004 Carsten Heinz and/or any other author listed
%% elsewhere in this file.
%%
%% Send comments and ideas on the package, error reports and additional
%% programming languages to <cheinz@gmx.de>.
%%
\def\filedate{2004/09/07}
\def\fileversion{1.3}
\NeedsTeXFormat{LaTeX2e}
\AtEndOfPackage{\ProvidesPackage{listings}
[\filedate\space\fileversion\space(Carsten Heinz)]}
\def\lst@CheckVersion#1{\edef\reserved@a{#1}%
\ifx\lst@version\reserved@a \expandafter\@gobble
\else \expandafter\@firstofone \fi}
\let\lst@version\fileversion
\def\lst@InputCatcodes{%
\makeatletter \catcode`\"12%
\catcode`\^^@\active
\catcode`\^^I9%
\catcode`\^^L9%
\catcode`\^^M9%
\catcode`\%14%
\catcode`\~\active}
\def\lst@RestoreCatcodes#1{%
\ifx\relax#1\else
\noexpand\catcode`\noexpand#1\the\catcode`#1\relax
\expandafter\lst@RestoreCatcodes
\fi}
\edef\lst@RestoreCatcodes{%
\noexpand\lccode`\noexpand\/`\noexpand\/%
\lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax}
\lst@InputCatcodes
\AtEndOfPackage{\lst@RestoreCatcodes}
\def\@lst{lst}
\def\lst@IfSubstring#1#2{%
\def\lst@temp##1#1##2##3\relax{%
\ifx \@empty##2\expandafter\@secondoftwo
\else \expandafter\@firstoftwo \fi}%
\expandafter\lst@temp#2#1\@empty\relax}
\def\lst@IfOneOf#1\relax#2{%
\def\lst@temp##1,#1,##2##3\relax{%
\ifx \@empty##2\expandafter\@secondoftwo
\else \expandafter\@firstoftwo \fi}%
\expandafter\lst@temp\expandafter,#2,#1,\@empty\re lax}
\def\lst@DeleteKeysIn#1#2{%
\expandafter\lst@DeleteKeysIn@\expandafter#1#2,\re lax,}
\def\lst@DeleteKeysIn@#1#2,{%
\ifx\relax#2\@empty
\expandafter\@firstoftwo\expandafter\lst@RemoveCom mas
\else
\ifx\@empty#2\@empty\else
\def\lst@temp##1,#2,##2{%
##1%
\ifx\@empty##2\@empty\else
\expandafter\lst@temp\expandafter,%
\fi ##2}%
\edef#1{\expandafter\lst@temp\expandafter,#1,#2,\@ empty}%
\fi
\fi
\lst@DeleteKeysIn@#1}
...
\end{lstlisting}
}
\end{Parallel}


\end{document}
%%
%% End of file `xmpl.tex'.

edico

maceop
11-09-2007, 12:20
Danke für die Antwort! Ich hatte mich da wohl etwas unklar ausgedrückt, entschuldigung.

Bin das Problem jetzt umgangen und habe die Sachen einfach aus der Tabelle rausgenommen und so im Text beschrieben inkl. lstlisting. Aber ich werde mir deinen Ansatz noch anschauen, man lernt ja nie aus ;-)

Auf jeden Fall danke!

edico
11-09-2007, 20:03
Nun kann es vielleicht sein, dass 2 Codes nebeneinander zu stellen sind -- auch das laesst sich mit 'parallel' vernuenftig loesen:

\documentclass[10pt]{article}
\usepackage{geometry}
\geometry{paperwidth=297.3mm,paperheight=210.2mm}
\usepackage{parallel,calc}
%\usepackage{lstxmpl}
\usepackage{listings}
\lstset{basicstyle=\footnotesize,frame=tb,
numbers=left,
numberstyle=\tiny, stepnumber=2, numbersep=10pt,
%xleftmargin=.5\textwidth,
}%

\begin{document}
Hier werden 2 code snippets nebeneinander pr\"asentiert unter Zuhilfenahme des 'parallel' Pakets. \par
Die Textweite wird parit\"atisch geteilt und die jeweilgen listing werden durch margin-Einz\"uge angepasst:

\begin{verbatim}
-----------------------------------------------------------------------
linke Haelfte rechte Haelfte
-----------------------------------------------------------------------
.475\textwidth <-- parallel--> .475\textwidth
xrightmargin=.525\textwidth <--listings --> xleftmargin=.525\textwidth
-----------------------------------------------------------------------
\end{verbatim}

\begin{Parallel}[v]{.475\textwidth}{.475\textwidth}
\ParallelLText{%
\small \lstset{xrightmargin=.525\textwidth}
\begin{lstlisting}{}
%% This is file `listings.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% listings-1.3.dtx (with options: `kernel')
\end{lstlisting}
}
\ParallelRText{%
\small \lstset{xleftmargin=.525\textwidth}
\begin{lstlisting}{}
%% This is file `listings.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% listings-1.3.dtx (with options: `kernel')
\end{lstlisting}
}
\end{Parallel}

\end{document}
%%
%% End of file `xmply.tex'.

edico