| Wenn man etwas in eine externe Datei schreiben möchte, kann man eine der folgender Methoden verwenden: 
 Was ist der Unterschied der verschiedenen Methoden und in was für Fällen bietet sich welche Methode an? | 
| 
 
 Beispiel ( Open in writeLaTeX \documentclass{article} \usepackage{blindtext} \newcounter{test} \makeatletter \newcommand*{\dowrite}[1]{% \stepcounter{test}% \write\@mainaux{\string\def\string\testpage{\thetest: #1}}% } \makeatother \begin{document} \dowrite{\thepage} \blindtext[1] \dowrite{\thepage} \blindtext[4] \dowrite{\thepage} \end{document} schreibt in die  
Die Erklärung dafür ist einfach: Der Zählertestwird bei jedem Aufruf von\dowriteum eins erhöht. Geschrieben wird aber tatsächlich erst am Ende des Dokuments, weil erst dann LaTeX erkennt, dass nicht mehr alles auf die erste Seite passt. Daher ist beim Schreiben der Zähler bereitstestbereits 3. Der Zählerpagewird erst beim Schreiben einer Seite erhöht. Daher ist er beim Schreiben der ersten Seite tatsächlich 1 und beim Schreiben der zweiten Seite tatsächlich 2.Jetzt mit  Open in writeLaTeX \documentclass{article} \usepackage{blindtext} \newcounter{test} \makeatletter \newcommand*{\dowrite}[1]{% \stepcounter{test}% \immediate\write\@mainaux{\string\def\string\testpage{\thetest: #1}}% } \makeatother \begin{document} \dowrite{\thepage} \blindtext[1] \dowrite{\thepage} \blindtext[4] \dowrite{\thepage} \end{document} Hier lauten die Einträge in die  
Nun haben wir quasi den umgekehrten Fall. Da die Einträge direkt bei der Ausführung von\dowritegeschrieben werden, befinden wir uns zu diesem Zeitpunkt noch immer auf Seite 1 und es wird der jeweils aktuelle Wert vontestgeschrieben. Die letzte\dowrite-Anweisung wird ebenfalls noch auf Seite 1 verarbeitet, weil erst beim impliziten Absatz von\end{document}erkannt wird, dass ein Teil des Materials der letzten\blindtext-Anweisung auf einer neuen Seite ausgegeben werden muss.
 Open in writeLaTeX \documentclass{article} \usepackage{blindtext} \newcounter{test} \makeatletter \newcommand*{\dowrite}[1]{% \stepcounter{test}% \protected@write\@mainaux{}{\protect\def\protect\testpage{\thetest: #1}}% } \makeatother \begin{document} \dowrite{\thepage} \blindtext[1] \dowrite{\thepage} \blindtext[4] \dowrite{\thepage} \end{document} Hier erhalten wird: 
Das ist also eine Art Mischform aus\immediate\writeund\write. Die unmittelbare Expansion wird durch das erwähnte\edeferreicht und führt dazu, dass der bei Ausführung von\dowriteaktualisierte Wert vontestgeschrieben wird. Die Expansion von\thepagewurde durch dessen Umdefinierung innerhalb von\protected@writeverhindert, so dass der beim Schreiben der Seite gültige Wert vonpagegeschrieben wird. Die zusätzlichen Lücken nach\defund\testpagekommen übrigens daher, dass hier kein String, sondern tatsächlich das nicht expandierte Makro geschrieben wird. Vergleichbar wäre das der Verwendung von\noexpandstatt\stringin den vorherigen Beispielen.Stellt sich nun die Frage, wie wir auch  Open in writeLaTeX \documentclass{article} \usepackage{blindtext} \newcounter{test} \makeatletter \newcommand*{\dowrite}[1]{% \stepcounter{test}% \protected@write\@mainaux{\let\thetest\relax}{\protect\def\protect\testpage{\thetest: #1}}% } \makeatother \begin{document} \dowrite{\thepage} \blindtext[1] \dowrite{\thepage} \blindtext[4] \dowrite{\thepage} \end{document} Und schon erhalten wir wieder: 
Durch das  LaTeX selbst verwendet  Das Paket  Das ist tatsächlich erleuchtend, v.a. was  
                
                
                
                
                
                (06 Aug '14, 20:30)
                cgnieder
                
             Nachfolgefrage: ich nehme an, der Unterschied zwischen  
                
                
                
                
                
                (08 Aug '14, 19:51)
                cgnieder
                
             @Clemens: Nicht ganz.  
                
                
                
                
                
                (08 Aug '14, 20:31)
                gast3
                
             | 
 
			