Seite 1 von 1

Problem listings und ifthen in Kombination

Verfasst: Sa 24. Jul 2010, 14:37
von huckepick
Hallo Community.

Situation:

Ich wollte eben zum ersten Mal das Paket listings ausprobieren.

Ich habe eine Datei erstellt, in der ich über ifthen Blöcke immer nur bestimmte Teile kompilieren lasse um latex Laufzeiten zu verkürzen.

Das funktioniert mit anderem Code in einem ifthen Block schon, nur bei den listings bekomme ich einen latex Fehler.

Problem:

Minimalbeispiel:
\documentclass{article}

%Block A
\usepackage{listings}
\usepackage{ifthen}

\newcommand{\printt}{10}

\begin{document}

\ifthenelse{\equal{\printt}{10}}{%start if

\begin{lstlisting}
for i:=maxint to 0 do
begin
{ do nothing }
end;
Write('Case sensitive');
\end{lstlisting}

}{}%end if

\end{document}

% Block A
% mit if : weder pdflatex, noch latex
% ohne if : pdflatex ja, latex ja
Kommentiere ich die start if / end if Zeilen aus, komilieren latex und pdftex. Lasse ich die Zeilen drin, wird die Datei nicht kompiliert.

Mein .log file ist leer. Daher schreibe ich mal die Fehlermeldung hier ab:

! Paragraph ended before \lst@next was complete.

   \par
1.21 }{}
   %end if
?

Woran könnte das liegen?

if-Abfrage mit Listing

Verfasst: Sa 24. Jul 2010, 14:57
von Stefan Kottwitz
Hallo,

listings und andere verbatim-ähnliche Umgebungen lassen sich nicht so einfach als Makro-Argument verwenden. Man kann jedoch auf TeX-Primitive zurückgreifen wie z.B. \ifx oder \ifnum:
\documentclass{article}

%Block A
\usepackage{listings}
\usepackage{ifthen}

\newcounter{printt}
\setcounter{printt}{10}

\begin{document}

\ifnum\value{printt}=10{%start if

\protect{\begin{lstlisting}
for i:=maxint to 0 do
begin
 do nothing 
end;
Write('Case sensitive');
\end{lstlisting}}

}
\else{Nothing}%end if
\fi

\end{document}
Viele Grüße,

Stefan

Verfasst: Sa 24. Jul 2010, 18:52
von huckepick
Danke dir. Gleich erscheint von mir noch ein neues Thema zu Listings.