Makroexpansion bei \write
Verfasst: Di 11. Apr 2023, 10:34
Hallo, ich verzweifele gerade. Irgendwie verstehe ich das Thema Makroexpansion nicht.
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:
und
Das nachstehende MWE zeigt meine Versuche (alles auskommentiert, weil nichts funktioniert). Aus der Beschreibung im TexBook Kapitel 20 werde ich leider nicht schlau.
Weiß jemand einen Rat?
Gruß vom Rolli
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