3
1

Hallo,

ich suche nach einer Möglichkeit, 2 unterschiedliche Lösungen zu Aufgaben anzubieten, nämlich eine ausführliche Lösung und eine Kurzlösung, die z. B. nur einen Hinweis oder einen Ergebniswert enthält.

Eine mögliche Lösung habe ich in den Beispielen zum Paket gefunden, hier wird Execise eine Eigenschaft "hint" (von mir umbenannt in shortsolution) hinzugefügt:

Öffne in Overleaf
\DeclareExerciseProperty{shortsolution}

\newcommand\printshortsolution{%
  \begin{description}
    \ForEachUsedExerciseByType{%
      \def\ExerciseType{##1}%
      \def\ExerciseID{##2}%
      \GetExercisePropertyT{shortsolution}
        {%
          \item[\XSIMmixedcase{\GetExerciseName}~##3]
           ####1%
        }%
    }%
  \end{description}
}

\newcommand\shortsolution[1]{\SetExerciseProperty{shortsolution}{#1}}

Da meine Aufgaben mehrere Unteraufgaben in einer Aufzählung a), b), ... enthalten, wäre folgende Lösung hilfreich:

Öffne in Overleaf
\documentclass{article}
\usepackage{xsim}

\begin{document}
  \begin{exercise}
    A first example for an exercise.
  \end{exercise}
  \begin{shortsolution}
    A first example for a shortsolution.
  \end{shortsolution}
  \begin{solution}
    A first example for a solution.
  \end{solution}
\end{document}

Ich möchte dann entscheiden können, welche Art der Lösung jeweils im Ausdruck landet.

gefragt 05 Jan, 04:49

RungeZipperer's gravatar image

RungeZipperer
763
Akzeptiert: 33%


So vielleicht – der springende Punkt hier ist die folgende Definition:

Öffne in Overleaf
\usepackage{environ,etoolbox}
\NewEnviron{shortsolution}{\SetExpandedExerciseProperty{shortsolution}{\expandonce{\BODY}}}

Da Du ja eine Umgebung möchtest, musst Du Dir auch eine definieren. Normalerweise kann man auf den Inhalt einer Umgebung aber nicht einfach so zugreifen. Da wir das aber müssen, um ihn speichern und später aufrufen zu können, müssen wir die Umgebung anders als normal definieren.

Das Paket environ ermöglicht genau das – der Inhalt einer Umgebung ist in der Umgebungsdefinition mit \BODY verfügbar. Den Inhalt kann man dann speichern – und da wir nicht das Makro sondern seinen Inhalt speichern wollen, verwenden wir \SetExpandedExerciseProperty, was sein Argument erst expandiert, bevor es ihn speichert. Zuletzt verwenden wir dann noch \expandonce vom Paket etoolbox, um \BODY nur genau einmal zu expandieren, bevor wir es speichern (sonst bekommen wir Probleme mit fragilen Befehlen…).

Der ganze Code:

Öffne in Overleaf
\documentclass{article}
\usepackage{xsim}

\usepackage{needspace}

\DeclareExerciseProperty{shortsolution}

% we'll use a description list for the shortsolutions:
\newcommand\printshortsolutions{%
  \begin{description}
    \ForEachUsedExerciseByType{%
      \def\ExerciseType{##1}%
      \def\ExerciseID{##2}%
      \GetExercisePropertyT{shortsolution}
        {%
          \item[Short Solution ##3]
           ####1%
        }%
    }%
  \end{description}
}

\usepackage{environ,etoolbox}
\NewEnviron{shortsolution}{\SetExpandedExerciseProperty{shortsolution}{\expandonce{\BODY}}}

\begin{document}

\section{Problems}
% set shortsolution through option:
\begin{exercise}[subtitle=Pythagoras]
  This is the first problem.
\end{exercise}
\begin{shortsolution}
  This is a shortsolution to the first problem.
\end{shortsolution}
\begin{solution}
  This is the solution to the first problem.
\end{solution}

\begin{exercise}[subtitle=Another Problem]
  This is the second problem.
\end{exercise}
\begin{solution}
  This is the solution to the second problem.
\end{solution}

% set shortsolution with custom command:
\begin{exercise}[subtitle=Yet Another Problem]
  This is the third problem.
\end{exercise}
\begin{shortsolution}
  This is a shortsolution to the third problem.
\end{shortsolution}
\begin{solution}
  This is the solution to the third problem.
\end{solution}

\section{Shortsolutions}
\printshortsolutions

\section{Solutions}
\printsolutions[headings=false]

\end{document}

alt text

Permanenter link

beantwortet 05 Jan, 05:19

Clemens's gravatar image

Clemens
20.5k153461

bearbeitet 05 Jan, 09:59

Wow...danke...hätte ich mit meinem rudimentären Kenntnissen allerdings tatsächlich nicht hinbekommen!

(05 Jan, 06:34) RungeZipperer
1

@RungeZipperer: Die Antwort gefällt dir also? Dann solltest du entsprechend handeln.

(05 Jan, 10:18) Ijon Tichy
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×9
×1

Frage gestellt: 05 Jan, 04:49

Frage wurde angeschaut: 263 Mal

Zuletzt aktualisiert: 05 Jan, 10:18