yeahright
04-03-2008, 08:57
Liebe Forumsgemeinde!
Nachdem ich das Netz einigermaßen ausführlich nach einer Lösung für mein Problem durchsucht habe, und doch keine gefunden habe, wende ich mich nun an das Forum. Ich möchte ein Skript mit Übungsbeispielen für Studenten erstellen, wobei jedes Beispiel aus drei Teilen besteht: Einer Angabe, einer Lösung (d.h. mit dem gesamten Lösungsweg), und dem Ergebnis (d.h. ohne Lösungsweg, nur das Endergebnis). Jedes Beispiel soll eine eindeutige ID (z.B. LZI001) erhalten und mit dieser ID als Dateinamen als .tex-Datei (also z.B. LZI001.tex) abgelegt sein, also pro Beispiel eine Datei, die jeweils wie folgt aufgebaut sein soll:
\begin{exercise}{Titel des Beispiels}
\begin{problem}
Gegeben sei... (Angabe)
\end{problem}
\begin{solution}
Um dieses Beispiel zu lösen, geht man am besten wie folgt vor: ... (Lösung)
\end{solution}
\begin{result}
$x = 42$ (Ergebnis)
\end{result}
\end{exercise}
Im Hauptdokument möchte ich nun eine Beispielsammlung zusammenstellen können, wobei ich bei jedem einzelnen Beispiel angeben können möchte, welcher Teil des Beispiels (Angabe, Lösung, Ergebnis) angezeigt werden soll, in der Art
\inputExercise{LZI001}{1}{1}{0}
\inputExercise{LZI004}{0}{0}{1}
\inputExercise{LZI008}{1}{0}{1}
wobei die 4 Parameter von \inputExercise bedeuten: Dateiname (zugleich Beispiel-ID), Anzeigen der Angabe, Anzeigen der Lösung, Anzeigen des Ergebnisses. In diesem Beispiel würden also von LZI001 Angabe und Lösung, von LZI004 nur das Ergebnis, und von LZI008 Angabe und Ergebnis angezeigt werden.
Die Lösung des ganzen könnte ich mir *vom Prinzip* mit folgenden Definitionen im Hauptdokument vorstellen:
\newcommand{\exerciseTitle}{}
\newcommand{\printProblem}{0}
\newcommand{\printSolution}{0}
\newcommand{\printResult}{0}
\newcommand{\inputExercise}[4]{%
\renewcommand{\exerciseTitle}{#1}%
\renewcommand{\printProblem}{#2}%
\renewcommand{\printSolution}{#3}%
\renewcommand{\printResult}{#4}%
\input{#1.tex}}%
\newenvironment{problem}{\ifthenelse{\printProblem = 1}{ % öffnende Klammer von \ifthenelse
}{
}{} % schließende Klammer und False-Zweig von \ifthenelse
}
\newenvironment{solution}{\ifthenelse{\printSoluti on = 1}{ % öffnende Klammer von \ifthenelse
}{
}{} % schließende Klammer und False-Zweig von \ifthenelse
}
\newenvironment{result}{\ifthenelse{\printResult = 1}{ % öffnende Klammer von \ifthenelse
}{
}{} % schließende Klammer und False-Zweig von \ifthenelse
}
Der ganze Inhalt des \begin{problem}...\end{problem} (bzw. solution und result) Blocks soll also in das \ifthenelse-Kommando eingeschlossen werden, das den jeweiligen Blockinhalt nur dann kompiliert, wenn \printProblem = 1. Das funktioniert natürlich nicht, weil die öffnenden und schließenden geschwungenen Klammern so nicht geschachtelt werden dürfen - es kommt zu einer Fehlermeldung. Ich hätte das ganze auch schon mit TeX \if und probiert, was aber auch nicht klappt.
Über verschiedene packages bin ich bei meiner Suche nach einer Problemlösung gestolpert (u.a. answers, exerquiz), die scheinen aber alle nicht so recht das zu tun, was ich möchte.
Vielen Dank schon einmal für jede Hilfe.
Markus
Nachdem ich das Netz einigermaßen ausführlich nach einer Lösung für mein Problem durchsucht habe, und doch keine gefunden habe, wende ich mich nun an das Forum. Ich möchte ein Skript mit Übungsbeispielen für Studenten erstellen, wobei jedes Beispiel aus drei Teilen besteht: Einer Angabe, einer Lösung (d.h. mit dem gesamten Lösungsweg), und dem Ergebnis (d.h. ohne Lösungsweg, nur das Endergebnis). Jedes Beispiel soll eine eindeutige ID (z.B. LZI001) erhalten und mit dieser ID als Dateinamen als .tex-Datei (also z.B. LZI001.tex) abgelegt sein, also pro Beispiel eine Datei, die jeweils wie folgt aufgebaut sein soll:
\begin{exercise}{Titel des Beispiels}
\begin{problem}
Gegeben sei... (Angabe)
\end{problem}
\begin{solution}
Um dieses Beispiel zu lösen, geht man am besten wie folgt vor: ... (Lösung)
\end{solution}
\begin{result}
$x = 42$ (Ergebnis)
\end{result}
\end{exercise}
Im Hauptdokument möchte ich nun eine Beispielsammlung zusammenstellen können, wobei ich bei jedem einzelnen Beispiel angeben können möchte, welcher Teil des Beispiels (Angabe, Lösung, Ergebnis) angezeigt werden soll, in der Art
\inputExercise{LZI001}{1}{1}{0}
\inputExercise{LZI004}{0}{0}{1}
\inputExercise{LZI008}{1}{0}{1}
wobei die 4 Parameter von \inputExercise bedeuten: Dateiname (zugleich Beispiel-ID), Anzeigen der Angabe, Anzeigen der Lösung, Anzeigen des Ergebnisses. In diesem Beispiel würden also von LZI001 Angabe und Lösung, von LZI004 nur das Ergebnis, und von LZI008 Angabe und Ergebnis angezeigt werden.
Die Lösung des ganzen könnte ich mir *vom Prinzip* mit folgenden Definitionen im Hauptdokument vorstellen:
\newcommand{\exerciseTitle}{}
\newcommand{\printProblem}{0}
\newcommand{\printSolution}{0}
\newcommand{\printResult}{0}
\newcommand{\inputExercise}[4]{%
\renewcommand{\exerciseTitle}{#1}%
\renewcommand{\printProblem}{#2}%
\renewcommand{\printSolution}{#3}%
\renewcommand{\printResult}{#4}%
\input{#1.tex}}%
\newenvironment{problem}{\ifthenelse{\printProblem = 1}{ % öffnende Klammer von \ifthenelse
}{
}{} % schließende Klammer und False-Zweig von \ifthenelse
}
\newenvironment{solution}{\ifthenelse{\printSoluti on = 1}{ % öffnende Klammer von \ifthenelse
}{
}{} % schließende Klammer und False-Zweig von \ifthenelse
}
\newenvironment{result}{\ifthenelse{\printResult = 1}{ % öffnende Klammer von \ifthenelse
}{
}{} % schließende Klammer und False-Zweig von \ifthenelse
}
Der ganze Inhalt des \begin{problem}...\end{problem} (bzw. solution und result) Blocks soll also in das \ifthenelse-Kommando eingeschlossen werden, das den jeweiligen Blockinhalt nur dann kompiliert, wenn \printProblem = 1. Das funktioniert natürlich nicht, weil die öffnenden und schließenden geschwungenen Klammern so nicht geschachtelt werden dürfen - es kommt zu einer Fehlermeldung. Ich hätte das ganze auch schon mit TeX \if und probiert, was aber auch nicht klappt.
Über verschiedene packages bin ich bei meiner Suche nach einer Problemlösung gestolpert (u.a. answers, exerquiz), die scheinen aber alle nicht so recht das zu tun, was ich möchte.
Vielen Dank schon einmal für jede Hilfe.
Markus