PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie bedingte Kompilierung in einem Latex-Dokument simulieren?



johlke
15-07-2008, 11:22
Hallo!

Ich möchte mit einer Latex-Quelldatei eine kurze und eine lange Ausgabe erzeugen. In der kurzen Ausgaben sollen einfach ein paar Textabschnitt fehlen. Da es für Latex keine bedingte Kompilierung gibt, habe ich versucht, mir mit folgenden, eigenen Kommando zu helfen:



%\newcommand{\versionlong}[1]{#1}
\newcommand{\versionlong}[1]{}


Wenn ich die lange Version erzeugen möchte, aktiviere ich obere Zeile, ansonsten unter Zeile. Textabschnitte, die nur in der langen Version erscheinen sollen, habe ich mit diesem Befehl eingerahmt:



\begin{versionlong}
\begin{lstlisting}[]
Hier ein Listing, das nur in der langen Version erscheinen soll.
\end{lstlisting}
\end{versionlong}


Allerdings erscheint der zusätzliche Text dennoch in der Kurzversion, obwohl das untere Kommando definiert ist (ohne #1).
Verwende ich hingegen



\versionlong{
\begin{lstlisting}[]
Hier ein Listing, das nur in der langen Version erscheinen soll.
\end{lstlisting}
}


erscheint der zusätzliche Text nicht. Dann gibt es jedoch Probleme, wenn ich das Kommando für die lange Version aktiviere. In diesem Fall kann der Quelltext nicht kompiliert werden. Grund:



Runaway argument?
! Paragraph endet before \lst@next was complete.


Hat jemand einen Lösungsvorschlag? Ich würde auch gern andere Möglichkeiten benutzen, um gewisse Textpassage auf Wunsch weglassen zu können.

Danke!
johlke

Donalduck
15-07-2008, 11:49
Vielleicht hilft dir DocStrip (http://texcatalogue.sarovar.org/entries/docstrip.html)?

johlke
15-07-2008, 11:57
Hallo Donald, das sieht hilfreich aus, allerdings finde ich keine leicht verständliche Anleitung im WWW. Es scheint sich um ein Programm zu handeln, das kompliziert eingebunden werden muss. Ich würde gern wenige Latex-Kommandos benutzen, um mein Anliegen umzusetzen.

voss
15-07-2008, 14:06
Ich möchte mit einer Latex-Quelldatei eine kurze und eine lange Ausgabe erzeugen. In der kurzen Ausgaben sollen einfach ein paar Textabschnitt fehlen. Da es für Latex keine bedingte Kompilierung gibt, habe ich versucht, mir mit folgenden, eigenen Kommando zu helfen:


Paket comment erlaubt das auf einfache Weise

Herbert

Syralist
15-07-2008, 16:38
Man könnte vielleicht auch die Teile, die nicht überall erscheinen sollen in separate Tex-Dateien auslagern und dann mit \includeonly{} arbeiten.

alexraasch
15-07-2008, 16:57
Schau dir mal das comment-Paket an. Darin kannst du Umgebungen commenta, commentb, etc definieren und in der Präambel des Dokumentes einstellen, welche der comment-Umgebungen ins Zieldokument übernommen werden soll.



\includecomment{commenta, commentb}

\begin{commenta}
...\end{commenta}

usw. ...

voss
15-07-2008, 17:47
Man könnte vielleicht auch die Teile, die nicht überall erscheinen sollen in separate Tex-Dateien auslagern und dann mit \includeonly{} arbeiten.

sie erscheinen zwar nicht, beeinflussen aber die Seitenzählung ...

Herbert

johlke
15-07-2008, 20:55
Hallo!

Das Package "comment" hilft mir weiter, allerdings nicht wie ihr beschrieben habt.

Benutze ich bspw.



\excludecomment{versiona}
\begin{versiona}
Ausgeschlossener Text
\end{versiona}


Erhalte ich den Compiler-Fehler "Environment versiona undefined".

Nutze ich aber statt dem Namen "versiona" den Namen "comment" kann ich obigen Text aus- und ein-kompilieren. Möchte man allerdings mehr als zwei Versionen erstellen, reicht der eine Name "comment" nicht mehr aus. Habt ihr vielleicht eine Idee, was an obigem Beispiel falsch ist? Ich habe auch google bemüht und dort finde ich ähnliche Anleitungen zu den eurigen.

Gruß
johlke

krihaa
15-07-2008, 22:14
Hallo,

es geht, wenn du den includecomment{}/excludecomment{}-Befehl für jede Umgebung einzeln aufrufst.


\documentclass{scrartcl}
\usepackage{comment}
\includecomment{commenta}
\excludecomment{commentb}

\begin{document}
\begin{commenta}
Test1
\end{commenta}
\begin{commentb}
Test2
\end{commentb}
\end{document}

johlke
15-07-2008, 23:29
Vielen Dank, so funktioniert's!