Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 14

05 Aug '14, 13:57

cgnieder's gravatar image

cgnieder
22.1k253463

Die übliche Methode wäre, am Ende des Dokuments (z.B. mit `\AtEndDocument{}`) die Punkte in die aux-Datei zu schreiben. \write\@auxout{...} Da die Datei, wenn sie vorhanden ist, zu Beginn das Dokuments eingelesen wird, stehen damit die Informationen auch von `\begin{document}` an zur Verfügung. In `\write\@auxout{...}` ist `...` das, was *vollständig expandiert* in die aux-Datei geschrieben wird. Man kann dort etwa einen Befehl `\@punkte` definieren, der den Wert des Zählers `gesamtpunktzahl` enthält: \write\@auxout{\string\gdef\string\@punkte{\arabic{gesamtpunktzahl}}}% Dabei wird mit `\string` dafür gesorgt, das `\gdef` und `\@punkte` genau so in die Datei geschrieben werden und nicht etwa expandiert werden. Gleichzeitig sorgt die Expansion dafür, dass man später etwas wie \gdef\@punkte{14} in der Datei stehen hat, also die konkrete Zahl des Zählers. Dann braucht man später `\@punkte` nur noch zu verwenden, eventuell mit einem Test, ob es überhaupt definiert ist. \documentclass{article} % Definitionen fuer Punkte % Counter, der zum Aufsummieren der Gesamtpunktzahl genutzt wird \newcounter{gesamtpunktzahl} \setcounter{gesamtpunktzahl}{0} % Befehl für Punkte \newcommand{\punkte}[1]{% \punktname{#1}% schreibe Punkte \addtocounter{gesamtpunktzahl}{#1}% addiere zur Gesamtzahl } % Befehl zum Schreiben der Punkte: \newcommand*\punktname[1]{\textsf{#1\,Punkt\ifnum#1=1\else e\fi}} \makeatletter % am Ende des Dokuments: \AtEndDocument{% % Gesamtpunkte in der aux-Datei als `\@punkte' speichern. Dabei beachten, % dass Definitionen global sein müssen und alles, was mit \write geschrieben wird, % expandiert würde. Daher müssen \gdef und \@punkte vor der Expansion geschützt werden \write\@auxout{\string\gdef\string\@punkte{\arabic{gesamtpunktzahl}}}% } % wenn `\@punkte' definiert ist, es als Gesamtpunktzahl ausgeben: \newcommand*\gesamtpunkte{% \@ifundefined{@punkte}{??}{\punktname{\@punkte}}% } \makeatother \begin{document} \gesamtpunkte \punkte{3} \punkte{4} \punkte{7} \end{document} ![alt text][1] Eine Alternative wäre vielleicht das Paket [`totcount`][2]. ---------- Allerdings sieht das danach aus, als ob eine Klausur oder etwas derartiges erstellt werden soll. Dafür gibt es bereits eine ganze Reihe von Paketen und Klassen, die sich damit beschäftigen: [`answers`][3], [`probsoln`][4], [`exam`][5], [`exsheets`][6] und einige mehr. `exsheets` zum Beispiel erlaubt eine sehr weitgehende Kontrolle über Aussehen und Design. Ein Beispiel, das nicht mal an der Oberfläche kratzt: dessen kratzt, was sich einstellen lässt. Ein möglicher Vorteil ist, dass auch halbe Punkte möglich sind: \documentclass{article} \usepackage[ngerman]{babel}% für automatische Übersetzung \usepackage{exsheets} \SetupExSheets{ points/format = \textsf , points/name = Punkt/e } \begin{document} \totalpoints \begin{question} \addpoints{3.5} \addpoints{4.25} \addpoints{7} \end{question} \end{document} [1]: http://texwelt.de/wissen/upfiles/punkte.png [2]: http://www.ctan.org/pkg/totcount [3]: http://www.ctan.org/pkg/answers [4]: http://www.ctan.org/pkg/probsoln [5]: http://www.ctan.org/pkg/exam [6]: http://www.ctan.org/pkg/exsheets
Klicke auf Einblenden/Ausblenden von Überarbeitungen 13

05 Aug '14, 12:34

cgnieder's gravatar image

cgnieder
22.1k253463

Die übliche Methode wäre, am Ende des Dokuments (z.B. mit `\AtEndDocument{}`) die Punkte in die aux-Datei zu schreiben. \write\@auxout{...} Da die Datei, wenn sie vorhanden ist` ist, zu Beginn das Dokuments eingelesen wird, stehen damit die Informationen auch von `\begin{document}` an zur Verfügung. In `\write\@auxout{...}` ist `...` das, was *vollständig expandiert* in die aux-Datei geschrieben wird. Man kann dort etwa einen Befehl `\@punkte` definieren, der den Wert des Zählers `gesamtpunktzahl` enthält: \write\@auxout{\string\gdef\string\@punkte{\arabic{gesamtpunktzahl}}}% Dabei wird mit `\string` dafür gesorgt, das `\gdef` und `\@punkte` genau so in die Datei geschrieben werden und nicht etwa expandiert werden. Gleichzeitig sorgt die Expansion dafür, dass man später etwas wie \gdef\@punkte{14} in der Datei stehen hat, also die konkrete Zahl des Zählers. Dann braucht man später `\@punkte` nur noch zu verwenden, eventuell mit einem Test, ob es überhaupt definiert ist. \documentclass{article} % Definitionen fuer Punkte % Counter, der zum Aufsummieren der Gesamtpunktzahl genutzt wird \newcounter{gesamtpunktzahl} \setcounter{gesamtpunktzahl}{0} % Befehl für Punkte \newcommand{\punkte}[1]{% \punktname{#1}% schreibe Punkte \addtocounter{gesamtpunktzahl}{#1}% addiere zur Gesamtzahl } % Befehl zum Schreiben der Punkte: \newcommand*\punktname[1]{\textsf{#1\,Punkt\ifnum#1=1\else e\fi}} \makeatletter % am Ende des Dokuments: \AtEndDocument{% % Gesamtpunkte in der aux-Datei als `\@punkte' speichern. Dabei beachten, % dass Definitionen global sein müssen und alles, was mit \write geschrieben wird, % expandiert würde. Daher müssen \gdef und \@punkte vor der Expansion geschützt werden \write\@auxout{\string\gdef\string\@punkte{\arabic{gesamtpunktzahl}}}% } % wenn `\@punkte' definiert ist, es als Gesamtpunktzahl ausgeben: \newcommand*\gesamtpunkte{% \@ifundefined{@punkte}{??}{\punktname{\@punkte}}% } \makeatother \begin{document} \gesamtpunkte \punkte{3} \punkte{4} \punkte{7} \end{document} ![alt text][1] Eine Alternative wäre vielleicht das Paket [`totcount`][2]. ---------- Allerdings sieht das danach aus, als ob eine Klausur oder etwas derartiges erstellt werden soll. Dafür gibt es bereits eine ganze Reihe von Paketen und Klassen, die sich damit beschäftigen: [`answers`][3], [`probsoln`][4], [`exam`][5], [`exsheets`][6] und einige mehr. `exsheets` zum Beispiel erlaubt eine sehr weitgehende Kontrolle über Aussehen und Design. Ein Beispiel, das nicht mal an der Oberfläche kratzt: \documentclass{article} \usepackage[ngerman]{babel}% für automatische Übersetzung \usepackage{exsheets} \SetupExSheets{ points/format = \textsf , points/name = Punkt/e } \begin{document} \totalpoints \begin{question} \addpoints{3.5} \addpoints{4.25} \addpoints{7} \end{question} \end{document} [1]: http://texwelt.de/wissen/upfiles/punkte.png [2]: http://www.ctan.org/pkg/totcount [3]: http://www.ctan.org/pkg/answers [4]: http://www.ctan.org/pkg/probsoln [5]: http://www.ctan.org/pkg/exam [6]: http://www.ctan.org/pkg/exsheets
Klicke auf Einblenden/Ausblenden von Überarbeitungen 12

05 Aug '14, 12:33

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 11

05 Aug '14, 12:25

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 10

05 Aug '14, 12:24

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 9

05 Aug '14, 12:23

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 8

05 Aug '14, 12:23

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 7

05 Aug '14, 11:53

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 6

05 Aug '14, 11:52

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 5

05 Aug '14, 11:52

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

05 Aug '14, 11:48

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

05 Aug '14, 11:40

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

05 Aug '14, 11:39

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

05 Aug '14, 11:34

cgnieder's gravatar image

cgnieder
22.1k253463