PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aufgabenblatt: Lösungen speichern



Behave14
05-08-2009, 18:43
Hallo

Bin daran ein Aufgabenblatt zu gestalten. Dabei soll es sehr viele Aufgaben geben, die Schlussendlich aber nicht alle aufs endgültige Aufgabenblatt sollen.

Mein Problem ist, Lösungen die in Kapitel 2 folgen, den Übungen richtig zuzuordnen:

Die Aufgaben erstelle ich mit :


\newtheorem{auf}{Aufgabe}
\newtheorem{loe}{Lösung}
\begi{document}
.
.
.

\chapter{Aufgaben}
\begin{aufg}
Frage?
\end{aufg}




\chapter{Lösungen}

\begin{loe}
Lösung
\end{loe}


Wenn ich nun gewisse Aufgaben wähle, muss ich eyakt die richtigen Lösungen dazu ebenfalls heraussuchen. Deshalb wäre es praktisch, die Lösungen direkt in der Aufgabe zu erfassen, so dass dann nur die Lösungen zu den endgültigen Aufgaben erscheinen.

Hatte die Idee dies zu tun, in dem ich bei jeder Aufgabenstellung eine Variable erzeuge mit der generierten Aufgabennummer (über das ganze Dokument fortschreitend, also eindeutig) als Name und darin die Lösung speichere.

Also so etwa:


\chapter{Aufgaben}
\begin{aufg}
Frage?
\end{aufg}
\newcommand{\{Aufgabe\arabic{aufg}}}{Lösungstext}

.
.
.

\begin{loe}
\Aufgabe1
\end{loe}


Dies funktioniert aber nicht.

Habe mir auch das Package answers angeschaut, dies macht eigentlich was ich will, ich bin aber an das hier beschriebene Layout gebunden!

Habt ihr eine Idee wie ich das erreichen kann was ich möchte?

Danke
Behave

mechanicus
05-08-2009, 19:39
Hallo,

um bei solchen Sachen gute Lösungsvorschläge zu bringen, ist es hilfreich, du erstellst ein Minimalbeispiel.

Du kannst auch der Umgebung aufg ein label zuordnen und dann mittels ref darauf verweisen.

Gruß
Marco

Behave14
05-08-2009, 20:48
Hallo

Entschuldige, hatte gerade wenig Zeit, dehalb hier mein Minimalbeispiel:


\documentclass{article}
\usepackage{amsthm}
\usepackage[latin9]{inputenc}
\theoremstyle{definition}
\newtheorem{aufg}{Aufgabe}
\newtheorem{loe}{Lösung}
\begin{document}
\section{Aufgaben}

%\begin{aufg}
%Frage 1?
%\end{aufg}

\aufgabennummer
\begin{aufg}
Frage 2?
\end{aufg}

\section{Lösungen}
\begin{loe}
Lösung Frage 1
\end{loe}

\begin{loe}
Lösung Frage 2
\end{loe}

\end{document}



Da Frage 1 nun auskommentiert ist, wird jetzt Frage 2 richtigweise als Aufgabe 1 bezeichnet. Nun möchte ich, dass automatisch Lösung der Frage 1 ebenfalls nicht erscheint. Ich hätte mir das so vorgstellt:
Ich definiere "dynamisch" eine Varible mit Name "AufgabeZugewieseneAufgabennummerImCounterAufg"
Dann könnte ich in den Lösungen bequem:


\begin{loe}
\aufgabe1
\end{loe}
\begin{loe}
\aufgabe2
\end{loe}
.
.
.


schreiben.

Das Problem ist, dass ich es nicht schaffe "dynamische" Variablennamen zu erzeugen, bei der ein Teil des Variablennamen jeweils dem Stand des Counters "aufg" entspricht.
Also im Stile:

\documentclass{article}
\usepackage{amsthm}
\usepackage[latin9]{inputenc}
\theoremstyle{definition}
\newtheorem{aufg}{Aufgabe}
\newtheorem{loe}{Lösung}
\begin{document}
\section{Aufgaben}

%\begin{aufg}
%Frage 1?
%\end{aufg}
%\newcommand{Aufgabe\arabic{aufg}}{Richtig ist (a)}


\begin{aufg}
Frage 2?
\end{aufg}
\newcommand{\Aufgabe{\arabic{aufg}}}{Richtig ist (a)}

\section{Lösungen}
\begin{loe}
\Aufgabe1
\end{loe}

\end{document}


Was an der Festlegung des Variablennamen scheitert.

Weiss nicht ob das geht, bin auch für alternative Lösungen mit gleichem Ergebnis froh. Wie gesagt macht das Package answery.sty genau was ich will. Da ich die Formatierung aber so haben muss wie im Minimalbeispiel kann ich das Package nicht verwenden.

rais
05-08-2009, 21:36
Moin moin,
als Ansatz vllt


\documentclass{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{ifthen}
\newtheorem{auf}{Aufgabe}
\newtheorem{loe}{Lösung}
\newenvironment{aufg}[1]{%
\begin{auf}
\expandafter\gdef\csname Aufgabe\Roman{auf}\endcsname{#1}%
}{\end{auf}}
\newcounter{loemerker}
\newif\ifloewiederherstellen
\newcommand*\loesung[1][0]{%
\loewiederherstellenfalse
\setcounter{loemerker}{\value{loe}}%erstmal aktuellen Stand merken...
\ifnum#1>0%
\setcounter{loe}{#1}\addtocounter{loe}{-1}% da die loe-Umgebung den loe-Zähler inkrementiert, muss dieser hier erst dekrementiert werden
\loewiederherstellentrue
\fi
\begin{loe}
\csname Aufgabe\Roman{loe}\endcsname
\end{loe}
\ifloewiederherstellen
\setcounter{loe}{\value{loemerker}}%
\fi
}
\begin{document}
\chapter{Aufgaben}
\begin{aufg}{Lösung zu foo}
Frage foo?
\end{aufg}

\begin{aufg}{Lösung zu bar}
Frage bar?
\end{aufg}

\begin{aufg}{Lösung zu baz}
Frage baz?
\end{aufg}

\chapter{Test}
Falls mal eine Lösung ``aus der Reihe tanzt'' \dots
\loesung[2]
alternativ vllt einfach
``\AufgabeII''
\chapter{Lösungen}
\whiledo{\value{loe}<\value{auf}}{%
\loesung
}

\end{document}

MfG

DieterH
05-08-2009, 21:45
Ich habe mit folgenden LaTeX-Anweisungen und benutzerdefinierten Makros sehr gute Erfahrungen gemacht. In einer externen LaTeX-Datei „Makro-Mathematik.tex sind folgende Variablen und Zähler und Makros definiert.



\newif\ifPrintSolutions
% --*----1----*----2----*----3----*----4----*----5----*----6----*----7--
\newcounter{AufgabenZaehler}
\newcounter{BlattZaehler}
% --*----1----*----2----*----3----*----4----*----5----*----6----*----7--
newcommand{\mathRuestzeugLengthB}{%
\setlength{\lenTmpX}{0.10\textwidth}%
\setlength{\lenTmpY}{0.45\textwidth}%
\setlength{\lenTmpZ}{0.45\textwidth}%
}
% --*----1----*----2----*----3----*----4----*----5----*----6----*----7--
%%% #1: Optionale VSPACE*-Angabe
%%% #2: Benutzerdefinierte Referenznummer
%%% #3: Text der Aufgabe
%%% #4: Text der Lösung
\newcommand{\mathAufgabeL}[4][0.8cm]{%
\ifthenelse{\value{AufgabenZaehler} > 0}{\setlength{\lenTmpD}{#1}}{\setlength{\lenTmpD}{ 0.01cm}}

\vspace{\lenTmpD}
\mathAufgabeLengthB
\label{#2}
\addtocounter{AufgabenZaehler}{1}% % defined in "DHMakros.tex"
\setcounter{cntItem}{0}% % defined in "DHMakros.tex"
%
% Re-define command "\labelitem" to force a) ..., b) ...
\renewcommand{\labelitemi}{\alph{cntItem})}
%
\begin{minipage}[]{\linewidth}
%\parbox[t][][l]{\lenTmpA}{\usecounter{BlattZaehler}-\usecounter{AufgabenZaehler}}\hfill
\parbox[t][][l]{\lenTmpA}{\arabic{BlattZaehler}-\arabic{AufgabenZaehler}}\hfill
\parbox[t][][l]{\lenTmpB}{#3}

\parbox[t][][l]{\lenTmpA}{\mbox{}}\hfill
\parbox[t][][l]{\lenTmpB}{%
\ifPrintSolutions

\vspace{0.4cm}
\large{\textit{Lösung:}}\normalsize\\
#4%
\fi
}
\end{minipage}
%
% Re-set definition of command "\labelitem"
\renewcommand{\labelitemi}{\textbullet}
}
% --*----1----*----2----*----3----*----4----*----5----*----6----*----7--


In der konkreten Aufgabendatei setzt man die Zähler auf bestimmte Werte:


\setcounter{AufgabenZaehler}{0}% % definiert in „Makro-Mathematik.tex“
\setcounter{BlattZaehler}{1}% % definiert in „Makro-Mathematik.tex“


Einer der beiden nachstehenden Boole'schen Werte wird gesetzt, der andere auskommentiert.
Wenn \PrintSolutionsfalse gesetzt ist, wird KEINE Lösung ausgedruckt.
Wenn \PrintSolutionstrue gesetzt ist, wird die Lösung ausgedruckt.


%\PrintSolutionsfalse
\PrintSolutionstrue
%
% Wenn die Lösung ausgedruckt werden soll, ist es ratsam, allgemeine Erklärungen mitzugeben, im Vorspann der Lösung.

\ifPrintSolutions
\include{R-M-Allgemein} % Allgemeine Texte zu Mathematik
\include{R-M-Algebra} % Allgemeine Texte zur Algebra
\include{R-M-Potenzen} % Allgemeine Texte zur Potenzrechnung
\else
\fi



Nun kommt ein konkreter Aufruf:


\mathAufgabeL{ALGEBRA-1}{%
Vereinfache:
\begin{displaymath}
\frac{1}{\sqrt{n+1} - \sqrt{n}}
\end{displaymath}
}{%
Im Nenner steht eine Differenz, deren Summanden Wurzeln sind. Diese Wurzelglieder sind zu entfernen. Es liegt nahe, die Beziehung $a^{2} - b^{2} = (a - b) \cdot (a + b)$ zu verwenden, indem man für $a = \sqrt{n+1}$ und $b = \sqrt{n}$ die genannten Wurzelglieder einsetzt. Konkret bedeutet dies, den Bruch mit $(\sqrt{n+1} + \sqrt{n})$ erweitert:
%
\begin{eqnarray*}
\frac{1}{\sqrt{n+1} - \sqrt{n}} & = &
\frac{1}{\sqrt{n+1} - \sqrt{n}} \cdot \frac{\sqrt{n+1} + \sqrt{n}}{\sqrt{n+1} + \sqrt{n}} \\
& = & \frac{\sqrt{n+1} + \sqrt{n}}{n+1 - n} = \frac{\sqrt{n+1} + \sqrt{n}}{1} =\sqrt{n+1} + \sqrt{n}
\end{eqnarray*}

Hinweis: Die Erweiterung des ursprünglichen Bruches mit seinem Nenner $(\sqrt{n+1} - \sqrt{n})$, \abrB{d}{h} Quadrieren des Nenners, hilft nicht weiter, da man dann gemäss $(a - b)^{2} = (a - b)(a - b)$ zwar bei den Quadraten $a^{2} = (\sqrt{n+1})^{2} = n+1$ und $b^{2} = (\sqrt{n})^{2} = n$ die Wurzel entfernt hätte, aber sich dafür den wurzelhaltigen Mischterm $-2ab = -2\sqrt{n+1}\sqrt{n}$ eingehandelt hätte.
}
%%% END OF TASK
% --*----1----*----2----*----3----*----4----*----5----*----6----*----7----*-


Hinweis: Das "Lineal", welches als Kommentarzeile mehrfach oben erscheint, ist eine für das Auge angenehme Trennlinie, um die einzelnen Aufgaben optisch von einander zu trennen.

Versuch's mal mit der vorgeschlagenen Lösung. Bei einer großen umfangreichen Aufgabe mit vielen Teilaufgaben empfehle ich, die Teilaufgaben mit ihren Lösungen in eigene Blöcke zu verschieben, d.h. einen neuen Makro zu definieren, der ähnlich wie der oben genannte arbeitet. Lediglich der Zähler der Teilaufgaben muss hochgezählt werden, während die Nummer der hauptaufgabe unverändert bleibt.

Gruss
Dieter

Behave14
06-08-2009, 10:25
Hallo vielen Dank für eure Lösungen. Habe diue Lösung von rais nun etwas abgewandelt. Funktioniert einwandfrei:

Etwas kleines hätte ich noch. Wie schaff ich es, dass die Aufgaben unabhängig von der section durchnummeriert werden? Denke müsste irgendwo den neuen Counter auf den alten Stand bringen.



\documentclass{scrreprt}
\usepackage[latin9]{inputenc}
\usepackage{ifthen}
\newtheorem{auf_a}{Aufgabe}
\newtheorem{loe_a}{Lösung}
\newtheorem{auf_b}{Aufgabe}
\newtheorem{loe_b}{Lösung}

%%Environmet a

\newenvironment{aufg_a}[1]{%
\begin{auf_a}
\expandafter\gdef\csname Aufgabe_a\Roman{auf_a}\endcsname{#1}%
}{\end{auf_a}}
\newcounter{loemerker_a}
\newif\ifloewiederherstellen
\newcommand*\loesunga[1][0]{%
\loewiederherstellenfalse
\setcounter{loemerker_a}{\value{loe_a}}%erstmal aktuellen Stand merken...
\ifnum#1>0%
\setcounter{loe_a}{#1}\addtocounter{loe_a}{-1}% da die loe-Umgebung den loe-Zähler inkrementiert, muss dieser hier erst dekrementiert werden
\loewiederherstellentrue
\fi
\begin{loe_a}
\csname Aufgabe_a\Roman{loe_a}\endcsname
\end{loe_a}
\ifloewiederherstellen
\setcounter{loe_a}{\value{loemerker_a}}%
\fi
}
%%Environmet b

\newenvironment{aufg_b}[1]{%
\begin{auf_b}
\expandafter\gdef\csname Aufgabe_b\Roman{auf_b}\endcsname{#1}%
}{\end{auf_b}}
\newcounter{loemerker_b}
\newif\ifloewiederherstellen
\newcommand*\loesungb[1][0]{%
\loewiederherstellenfalse
\setcounter{loemerker_b}{\value{loe_b}}%erstmal aktuellen Stand merken...
\ifnum#1>0%
\setcounter{loe_b}{#1}\addtocounter{loe_b}{-1}% da die loe-Umgebung den loe-Zähler inkrementiert, muss dieser hier erst dekrementiert werden
\loewiederherstellentrue
\fi
\begin{loe_b}
\csname Aufgabe_b\Roman{loe_b}\endcsname
\end{loe_b}
\ifloewiederherstellen
\setcounter{loe_b}{\value{loemerker_b}}%
\fi
}



\begin{document}
\chapter{Aufgaben}
\section{1}

%\begin{aufg_a}{Lösung zu foo}
% Frage foo?
%\end{aufg_a}

\begin{aufg_a}{Lösung zu bla}
Frage bla?
\end{aufg_a}



\section{2}
\begin{aufg_b}{Lösung zu bar}
Frage bar?
\end{aufg_b}

\begin{aufg_b}{Lösung zu baz}
Frage baz?
\end{aufg_b}





\chapter{Lösungen}
\section{1}
\whiledo{\value{loe_a}<\value{auf_a}}{%
\loesunga }

\section{2}
\whiledo{\value{loe_b}<\value{auf_b}}{%
\loesungb }

\end{document}

rais
06-08-2009, 21:19
Moin moin,

Hallo vielen Dank für eure Lösungen. Habe diue Lösung von rais nun etwas abgewandelt. Funktioniert einwandfrei:

Etwas kleines hätte ich noch. Wie schaff ich es, dass die Aufgaben unabhängig von der section durchnummeriert werden? Denke müsste irgendwo den neuen Counter auf den alten Stand bringen.

wozu dann erst getrennte Aufgaben stellen?


\documentclass{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{ifthen}
\newtheorem{auf}{Aufgabe}
\newtheorem{loe}{Lösung}
\newenvironment{aufg}[1]{%
\begin{auf}
\expandafter\gdef\csname Aufgabe\Roman{auf}\endcsname{#1}%
}{\end{auf}}
\newcounter{loemerker}
\newif\ifloewiederherstellen
\newcommand*\loesung[1][0]{%
\loewiederherstellenfalse
\setcounter{loemerker}{\value{loe}}%erstmal aktuellen Stand merken...
\ifnum#1>0%
\setcounter{loe}{#1}\addtocounter{loe}{-1}% da die loe-Umgebung den loe-Zähler inkrementiert, muss dieser hier erst dekrementiert werden
\loewiederherstellentrue
\fi
\begin{loe}
\csname Aufgabe\Roman{loe}\endcsname
\end{loe}
\ifloewiederherstellen
\setcounter{loe}{\value{loemerker}}%
\fi
}
\newcounter{numaufsec}%Anzahl Abschnitte, in denen Aufgaben gestellt werden
\newcommand*\stellemerken{%
\expandafter\xdef\csname bishier\Roman{section}\endcsname{\arabic{auf}}%
\stepcounter{numaufsec}%
}

\begin{document}
\chapter{Aufgaben}
\section{1}
\begin{aufg}{Lösung zu foo}
Frage foo?
\end{aufg}
\begin{aufg}{Lösung zu bla}
Frage bla?
\end{aufg}

\stellemerken

\section{2}
\begin{aufg}{Lösung zu bar}
Frage bar?
\end{aufg}

\begin{aufg}{Lösung zu baz}
Frage baz?
\end{aufg}

\stellemerken

\section{3}
Mal ganz ohne Aufgabe\dots

\stellemerken

\section{4}
\begin{aufg}{Lösung zu blubb}
Frage blubb?
\end{aufg}

\stellemerken

\chapter{Lösungen}
\whiledo{\value{section}<\value{numaufsec}}{%
\section{\arabic{section}}
\edef\bishier{\csname bishier\Roman{section}\endcsname}%
\ifnum\value{loe}<\bishier\relax
\whiledo{\value{loe}<\bishier}{\loesung}%
\else
In diesem Abschnitt wurden keine Aufgaben gestellt.
\fi
}
\ifnum\value{loe}<\value{auf}%fehlen doch noch welche?
\section{zu wenig Stellen gemerkt}
\whiledo{\value{loe}<\value{auf}}{\loesung}%
\fi

\end{document}
Schwachstellen:
-- `\stellemerken' muß am Ende jeder \section gesetzt werden, von der ersten bis zur letzten \section, in der Aufgaben gestellt werden (auch wenn die \section davor/dazwischen gar keine Aufgaben enthält)
-- die Abschnitte mit den Aufgaben müssen sich innerhalb eines Kapitels befinden

aber vllt tut es damit bei Dir ja schon.

MfG

Behave14
07-08-2009, 11:53
Super, vielen Dank.
Die Lösung reicht für meinen Einsatz!

Gruss
Behave

vci
11-08-2009, 16:36
Ohne hier unnötig Buchwerbung machen zu wollen, das Buch LaTeX Hacks von Anselm Lingnau enthält Tipps um Aufgabenblätter (inkl Lösungen) und Trainerhandbücher zu erstellen. Da ich nicht weiss wie es aussieht wenn man aus dem Buch Sachen abtippt und online stellt, lasse ich es lieber ...