Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Angabe-Lösung-Ergebnis ausblendbar

  1. #1
    yeahright
    Gast

    Angabe-Lösung-Ergebnis ausblendbar

    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:

    Code:
    \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

    Code:
    \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:
    Code:
    \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{\printSolution = 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

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Hallo und Herzlich Willkommen
    Zitat Zitat von yeahright Beitrag anzeigen
    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:

    Code:
    \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}
    wenn Du in der Gestaltung dieser Übungen noch frei bist, würde ich in etwa
    Code:
    %%%LZI001.tex:
    
    \begin{exercise}{Titel des Beispiels}
      \problem{%
        Gegeben sei... (Angabe)%
    }
      \solution{%
        Um dieses Beispiel zu lösen, geht man am besten wie folgt vor: ... (Lösung)%
    }
      \result{%
        $x = 42$ (Ergebnis)%
    }
    \end{exercise}
    vorschlagen, evtl. auch den Titel in einen eigenen Befehl packen und die Umgebung hier weglassen und stattdessen im \inputExercise setzen ... hmm

    Zumindest funzt es dann mit der eigenen Defintion
    Code:
    \documentclass[ngerman]{article}
    \usepackage[utf8]{inputenc}
    \usepackage{babel}
    
    \newcounter{exercise}
    
    \newif\ifprintProblem
    \newif\ifprintSolution
    \newif\ifprintResult
    
    \newif\ifgotprintedProblem
    \newif\ifgotprintedSolution
    \newif\ifgotprintedResult
    \gotprintedProblemfalse
    \gotprintedSolutionfalse
    \gotprintedResultfalse
    
    \newcommand*\exerciseTitle{}
    \newcommand*\problemname{Problemstellung}
    \newcommand*\solutionname{Lösungsweg}
    \newcommand*\resultname{Ergebnis}
    
    \newcommand{\inputExercise}[4]{%
      \renewcommand*\exerciseTitle{#1}%
      \ifnum#2 > 0 \printProblemtrue \else \printProblemfalse \fi%
      \ifnum#3 > 0 \printSolutiontrue \else \printSolutionfalse \fi%
      \ifnum#4 > 0 \printResulttrue \else \printResultfalse \fi%
      \input{#1}}%
    
    \newenvironment{exercise}[1]{%
    \gotprintedProblemfalse
    \gotprintedSolutionfalse
    \gotprintedResultfalse
    \refstepcounter{exercise}
    \subsection*{(\theexercise) #1}
    }{%
    \ifprintProblem %
      \ifgotprintedProblem\relax\else\typeout{Environment exercise: `\problemname' was requested for `\exerciseTitle' (\theexercise) but none was given!}%
    \fi\fi%
    \ifprintSolution %
      \ifgotprintedSolution\relax\else\typeout{Environment exercise: `\solutionname' was requested for `\exerciseTitle' (\theexercise)  but none was provided!}%
    \fi\fi%
    \ifprintResult %
      \ifgotprintedResult\relax\else\typeout{Environment exercise: `\resultname' was requested for `\exerciseTitle' (\theexercise) but none was provided!}%
    \fi\fi%
    }
    
    \newcommand\problem[1]{%
    \ifprintProblem \noindent\textbf{\problemname:} #1\par\gotprintedProblemtrue\fi%
    }
    \newcommand\solution[1]{%
    \ifprintSolution \noindent\textbf{\solutionname:} #1\par\gotprintedSolutiontrue\fi%
    }
    \newcommand\result[1]{%
    \ifprintResult \noindent\textbf{\resultname:} #1\par\gotprintedResulttrue\fi%
    }
    \begin{document}
    \inputExercise{LZI001}{1}{1}{0}
    \inputExercise{LZI002}{0}{0}{1}
    \inputExercise{LZI001}{1}{0}{0}
    \end{document}
    d. h. mit
    Code:
    %%% LZI002.tex:
    
    \begin{exercise}{Titel eines anderen Beispiels}
      \problem{%
        Gegeben sei... (Angabe)%
    }
      \solution{%
        Um dieses Beispiel zu lösen, geht man am besten wie folgt vor: ... (Lösung)%
    }
    \end{exercise}
    dann siehst Du auch gleich was passiert, wenn eine Anforderung mal nicht erfüllt wird.
    ...nutzt natürlich nix, wenn die ganze exercise-Umgebung fehlt.

    Wenn Du bei Umgebungen bleiben willst, dann schau Dir mal das comment-Paket an, afaik kannst Du da per \includecomment bzw. \excludecomment Deine Umgebungen entsprechend zum Nichts/-Tun überreden; vermutlich findest Du auch dazu hier bereits irgend einen Thread.;-)

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    yeahright
    Gast
    Hallo Rainer!

    Wow, das ging ja schnell, vielen Dank! Wahrscheinlich ist es tatsächlich einfacher und sinnvoller, auf die environments zu verzichten und das ganze in commands zu verpacken. Ich werde mir die Lösung eingehend anschauen.

    Viele Grüße,

    Markus

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •