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