Datatool, Ausgabe von tex-files
Ich spiele gerade mit dem Gedanken, wie man möglichst einfach eine große Menge an Übungsaufgaben des gleichen Typs inklusive Musterlösungen für studentische Zwecke erstellen kann. Dafür habe ich mir bisher folgendes überlegt:
\documentclass[12pt,parskip=true]{scrartcl}
\usepackage{filecontents}
\begin{filecontents*}{test.csv}
PunktA,PunktB,PunktC,PunktD,VektorV,VektorW
0,1,1,1,1,0
3,2,-2,4,-5,2
\end{filecontents*}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{datatool}
\DTLsetseparator{,}
\DTLloaddb{namelist}{test.csv}
\begin{document}
\DTLforeach*{namelist}{
\PunktA=PunktA,%
\PunktB=PunktB,%
\PunktC=PunktC,%
\PunktD=PunktD,%
\VektorV=VektorV,%
\VektorW=VektorW%
}{Bestimmen Sie den Vektor $\overrightarrow{AB}$:
\[A(\PunktA,\PunktB),~B(\PunktC,\PunktD),~\overrightarrow{AB}=\begin{pmatrix} \VektorV \\ \VektorW\end{pmatrix}\]
}
\end{document}
Inhaltlich geht es zunächst einmal um analytische Geometrie, soll aber natürlich nicht nur darauf eingeschränkt bleiben. Die eingelesene csv-Datei würde aus einem Excelsheet kommen, PunktA bis PunktD entsprechen den Koordinaten von Punkten die variiert werden und per Formel werden dann die Einträge der notwendigen Vektoren für die Musterlösung berechnet.
Die Musterlösung soll letztendlich nicht als PDF vorliegen, sondern es wird sich um Onlineaufgaben handeln, welche die Studenten bearbeiten können und die automatisch ausgewertet und mit Musterlösung zurückgegeben werden. Ich kann in der Onlineumgebung direkt mit LaTeX arbeiten und hätte deshalb gerne, dass die einzelnen Durchläufe eine tex-Datei liefern; dann ist der Rest eine Copy-Paste-Tätigkeit. Die einzeln erstellen Dateien müssten auch nicht weiter kompiliert werden. Lässt sich das realisieren?
Anders gesagt: Ich hätte gerne die Tex-Datei von jedem Durchlauf, um diese weiter bearbeiten und kopieren zu können. Für das angefügt Beispiel hätte ich also gerne
Bestimmen Sie den Vektor $\overrightarrow{AB}$:
\[A(0,1),~B(1,1),~\overrightarrow{AB}=\begin{pmatrix} 1 \\ 0 \end{pmatrix}\]
sowie
Bestimmen Sie den Vektor $\overrightarrow{AB}$:
\[A(3,2),~B(-2,4),~\overrightarrow{AB}=\begin{pmatrix} -5 \\ 2 \end{pmatrix}\]
um diesen Code weiter bearbeiten und in ein anderes Dokument kopieren zu können.
Nachtrag: Lässt sich noch einstellen, dass Umlaute korrekt in die tex-Datei geschrieben werden?
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{filecontents}
\begin{filecontents*}{test.csv}
A;B;C
1;2;3
4;5;6
\end{filecontents*}
\usepackage{datatool}
\DTLsetseparator{;}
\DTLloaddb{daten}{test.csv}
\newwrite\texfile
\makeatletter
\newcommand\writetexfile[2]{%
\immediate\openout\texfile #1
\immediate\write\texfile{#2}%
\immediate\closeout\texfile
}
\makeatother
\newcounter{texfile}
\newcommand\writenotexfile[1]{%
\stepcounter{texfile}%
\writetexfile{\jobname-\thetexfile.tex}{#1}%
}
\begin{document}
\DTLforeach*{daten}{
\A=A,%
\B=B,%
\C=C%
}{%
\writenotexfile{%
Text mit Umlauten Ä Ö Ü
}%
}
\end{document}
Dieses Beispiel liefert mir zwei Dateien mit Inhalt:
Text mit Umlauten \protect \unhbox \voidb@x \bgroup \U@D 1ex{\setbox \z@ \hbox {\char 127}\dimen@ -.45ex\advance \dimen@ \ht \z@ \fontdimen 5\font \dimen@ }\accent 127\fontdimen 5\font \U@D A\egroup \protect \unhbox \voidb@x \bgroup \U@D 1ex{\setbox \z@ \hbox {\char 127}\dimen@ -.45ex\advance \dimen@ \ht \z@ \fontdimen 5\font \dimen@ }\accent 127\fontdimen 5\font \U@D O\egroup \protect \unhbox \voidb@x \bgroup \U@D 1ex{\setbox \z@ \hbox {\char 127}\dimen@ -.45ex\advance \dimen@ \ht \z@ \fontdimen 5\font \dimen@ }\accent 127\fontdimen 5\font \U@D U\egroup