PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mathe-Umgabung als Parameter in Makros



DieterH
22-12-2007, 01:12
Für das Erstellen einer Liste von Mathematik-Aufgaben mit Lösungen möchte ich nur eine einzige LaTeX-Datei pflegen. Ich definierte einen Makro

% #1: Nummer der Aufgabe
% #2: Text der Aufgabe
% #3: Text der Lösung
\newcommand{\matheAufgabe}[3]{%
\begin{minipage}[]{\linewidth}
\parbox[t][][l]{\lenA}{#1}\hfill
\parbox[t][][l]{\lenB}{#2}\hfill

% Falls Lösung gedruckt werden soll, das Kommentarzeichen in der nächsten
% Zeile wegnehmen
% #3

\vspace*{1cm}
\end{minipage}
}

1. Fehler
Der Makro funktioniert jedoch nicht immer. Kommt im Parameter #2 eine Mathematik-Umgebung wie z.B. \begin{displaymath}...\end{displaymath} vor, tritt der Fehler:

! LaTeX Error: Bad math environment delimiter.

auf. Einfache Umgebung wie z.B. „\begin{math}...\end{math} werden akzeptiert.


2.Fehler
Entferne ich das Kommentarzeichen vor dem #3, erhalte ich ebenfalls den obigen Fehler, da im Text der Lösung Mathe-Umgebungen vorkommen.

FRAGEN
1. Was mache ich falsch? Was muss im Makro wie geändert werden, damit er wunschgemäss funktioniert?
2. Wie sieht ein „if“-Konstrukt im Makro aus, damit ich durch Setzen einer Variablen (z.B. \def\PrintSolutions 0 (oder 1) das Ausdrucken der Lösung unmittelbar an die Aufgabenstellung unterbinden bzw. auslösen kann?

Danke
Gruss
Dieter

rais
22-12-2007, 19:38
Moin moin,


Der Makro funktioniert jedoch nicht immer. Kommt im Parameter #2 eine Mathematik-Umgebung wie z.B. \begin{displaymath}...\end{displaymath} vor, tritt der Fehler:

! LaTeX Error: Bad math environment delimiter.

auf. Einfache Umgebung wie z.B. „\begin{math}...\end{math} werden akzeptiert.

den Fehler kann ich so nicht reproduzieren -- erstelle bitte ein funktionierendes Minimalbeispiel (http://www.minimalbeispiel.de).


2. Wie sieht ein „if“-Konstrukt im Makro aus, damit ich durch Setzen einer Variablen (z.B. \def\PrintSolutions 0 (oder 1) das Ausdrucken der Lösung unmittelbar an die Aufgabenstellung unterbinden bzw. auslösen kann?

Das kannst Du z. B. mit


\newif\ifprintsolutions
\printsolutionsfalse

entsprechend der Aufruf des dritten Parameters Deiner \matheAufgabe erweitert:


\ifprintsolutions \textit{Lösung:} #3\fi

dann kannst Du im Text per


\printsolutionstrue

die Ausgabe der Lösungen freigeben und per


\printsolutionsfalse

wieder sperren.
Aber warum zählst Du Deine Aufgaben selbst?
MfG,

DieterH
23-12-2007, 10:16
Hallo Rainer,

> den Fehler kann ich so nicht reproduzieren -- erstelle bitte ein funktionierendes Minimalbeispiel.

Bei der Erstellung des Minimalbeispiels stieß ich auf die Ursache des Fehlers. Ich hatte vor dem Makro „\matheAufgabe“ einen anderen Makro:

\newcommand{\mathBinom}[2]{%
\begin{displaymath}
\left( \begin{array}{c} #1 \\ #2 \end{array} \right)
\end{displaymath}

Nach dem Auskommentieren der „displaymath“-Anweisungen läuft auch mein ursprünglicher Makro.

Vielen Dank für „\ifprintsolutions“

> Aber warum zählst Du Deine Aufgaben selbst?
Die Nummer der Aufgaben sind nicht immer nur aufsteigende Zahlen, sondern auch Nummern wie „3a“, „5b“, oder auch „2-4“. Gelegentlich beziehe ich mich in einer Aufgabe auf eine andere nd füge evtl. weitere Aufgaben ein; daher die „harte“ Verdrahtung der Nummern der Aufgaben.

Ich bedanke mich für die rasche Hilfe!
Ein schönes Weihnachtsfest!

An alle:
Übrigens, man nimmt nicht zwischen Weihnachten und Neujahr zu, sondern zwischen Neujahr und Weihnachten. ;-)

Gruss
Dieter

rais
23-12-2007, 11:05
Hallo Dieter,

Die Nummer der Aufgaben sind nicht immer nur aufsteigende Zahlen, sondern auch Nummern wie „3a“, „5b“, oder auch „2-4“. Gelegentlich beziehe ich mich in einer Aufgabe auf eine andere nd füge evtl. weitere Aufgaben ein; daher die „harte“ Verdrahtung der Nummern der Aufgaben.

das wären für mich zwei Gründe mehr, das gerade nicht "von Hand" machen zu wollen...


\newcounter{aufgabe}
\newcounter{subaufgabe}[aufgabe]
\renewcommand\thesubaufgabe{\theaufgabe\alph{subau fgabe}}
\newcommand\Aufgabe[2]{\refstepcounter{aufgabe}\matheAufgabe{\theaufgabe }{#1}{#2}}%<--ich zähl' nicht gerne selbst;-)
\newcommand\utAufgabe[2]{%
\stepcounter{aufgabe}%
\refstepcounter{subaufgabe}%
\matheAufgabe{\thesubaufgabe}{#1}{#2}}
\newcommand\subAufgabe[2]{%
\refstepcounter{subaufgabe}%
\matheAufgabe{\thesubaufgabe}{#1}{#2}}
theoretisch sollten sich damit auch ge-\label-te Aufgaben \ref-erenzieren lassen können.;)


\Aufgabe{Aufgabe}{Lösung}\label{ag:test}
\subAufgabe{Unteraufgabe zu \ref{ag:test}}{Lösug}
\utAufgabe{von vorneherein unterteilte Aufgabe}{Lösung}
\subAufgabe{weiter unterteilt}{Lösung}

Frohes Fest,