Ich möchte an einer Stelle
3 + 5 = ?
und an einer anderen Stelle
3 + 5 = 8
stehen haben - das "3 + 5 =" aber nicht zweimal schreiben. Mein Ansatz:
\def\Loesung{=?}
$3+5\Loesung{8}$
\def\Loesung{=#1}
$3+5\Loesung{8}$
\documentclass{article}
% Workaround aus dem TexBook, Appendix D: Dirty Tricks, Seite 373
\long\def\unexpandedwrite#1#2{\def\finwrite{\write#1}%
{\aftergroup\finwrite\aftergroup{\sanitize#2\endsanity}}}
\def\sanitize{\futurelet\next\sanswitch}
\def\sanswitch{\let\n@xt\endsanity \ifx\next\endsanity
\else\ifcat\noexpand\next\stoken\aftergroup\space\let\n@xt=\eat
\else\ifcat\noexpand\next\bgroup\aftergroup{\let\n@xt=\eat
\else\ifcat\noexpand\next\egroup\aftergroup}\let\n@xt=\eat
\else\let\n@xt=\copytok\fi\fi\fi\fi \n@xt}
\def\eat{\afterassignment\sanitize \let\next= }
\long\def\copytok#1{\ifcat\noexpand#1\relax\aftergroup\noexpand\fi
\ifcat\noexpand#1\noexpand~\aftergroup\noexpand\fi
\aftergroup#1\sanitize}
\def\endsanity\endsanity{}
\def\Loesung{=?}
\newcommand{\Aufgabe}[1]{
\def\Loesung{=?}
#1
%\immediate\write\myFile{\string\def\Loesung{=#1}}
%\immediate\write\myFile{\noexpand\def\Loesung{=#1}}
%\immediate\write\myFile{\unexpanded{\def\Loesung{=#1}}}
%\immediate\write\myFile{\unexpandedwrite\def\Loesung{=#1}} % Gibt schon beim Übersetzen einen Fehler
%\immediate\write\myFile{\meaning\def\Loesung{=#1}}
\immediate\write\myFile{#1}
}
\begin{document}
\newwrite\myFile
\immediate\openout\myFile=\jobname.aufgabe
\Aufgabe{$3+5\Loesung{8}$}
\immediate\closeout\myFile
%\input{\jobname.aufgabe} % Keiner meiner Versuche funktioniert ...
\end{document}
Gruß vom Rolli

