PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : lstlisting und datatool



grave
01-01-2013, 17:35
Hallo,

ich habe mit einer Zusammenstellung von listing, datatool und longtable versucht, einen serienbriefartigen Druck zu gestalten. Jedes Dokument enthält einige Tabellen, in denen in verschiedenen Zeilen auch Quellcode (mittels listings) zu finden ist.


Longtable mitsamt listings (\begin{lstlisting}) funktioniert, sobald aber die Kombination datatool bzw. \DTLforeach dazukommt, lässt sich das Dokument nicht mehr kompilieren.

Verwendet man \lstinline|bla| funktioniert es, siehe das Minimalbeispiel unten. Ich vermute, es liegt mit an der Umgebung lstlisting in Zusammenhang mit dem DTLforeach.

Vielen Dank für die Rückmeldungen!

Gruß
Grave




\documentclass[a4paper]{article}
\begin{filecontents*}{test2.csv}
Name,
Peter,
Susi,
\end{filecontents*}
\usepackage{datatool}
\usepackage{listings}
\lstset{
numbers=left,
stepnumber=1,
numbersep=50pt,
numberstyle=\small,
basicstyle=\ttfamily,
}
\begin{document}
\section{Test}
\DTLloaddb{list}{test2.csv}
\DTLforeach{list}{
\Name=Name}
{ \Name \newline
problematisch:
\begin{lstlisting}
WRITE 'Input the limit'
\end{lstlisting}
funktioniert: \newline
\lstinline|TEST|
}
\end{document}

rais
02-01-2013, 21:12
Frohes Neues,


Longtable mitsamt listings (\begin{lstlisting}) funktioniert, sobald aber die Kombination datatool bzw. \DTLforeach dazukommt, lässt sich das Dokument nicht mehr kompilieren.

die lstlisting-Umgebung ist vergleichbar mit einer verbatim-Umgebung ... und die ist innerhalb \DTLforeach nicht zulässig (siehe in `texdoc datatool-user' die Beschreibung zu \DTLforeach).
Vllt kannst Du den Code ja auslagern:


\documentclass[a4paper]{article}
\begin{filecontents*}{test2.csv}
Name,
Peter,
Susi,
\end{filecontents*}
\begin{filecontents*}{\jobname-sample-write.code}
WRITE 'Input the limit'
\end{filecontents*}
\usepackage{datatool}
\usepackage{listings}
\lstset{
numbers=left,
stepnumber=1,
numbersep=50pt,
numberstyle=\small,
basicstyle=\ttfamily,
}
\begin{document}
\section{Test}
\DTLloaddb{list}{test2.csv}
\DTLforeach{list}{\Name=Name}
{ \Name
\lstinputlisting{\jobname-sample-write.code}
}
\end{document}

MfG

grave
03-01-2013, 12:42
Hallo,

danke! Das Minimalbeispiel funktioniert schonmal. Werde das sobald ich Zeit habe, direkt im eigentlichen Projekt testen. Mal wieder zwei Sachen dabei, auf die ich selber hätte kommen können:

1.) Doku zu DTLforeach anschauen ...

2.) dritte Möglichkeit Quellcode einzubinden, nämlich über externe Dateien, ebenfalls testen ...


Danke jedenfalls nochmal!

Gruß
Grave