Ich möchte eine Punktetabelle erstellen, die mir aus einer kommaseparierten Liste erstellt wird, wobei die Anzahl der Einträge in dieser Liste variabel sind.

Folgendes nicht-lauffähiges Grundgerüst stelle ich mir vor:

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\documentclass[12pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\newcommand{\punkte}{2,4,5,1,10}
\newcommand{\anzahl}{% Soll berechnet werden: 5% }
\newcommand{\summe}{% Soll berechnet werden: 2+4+5+1+10 =22 %}
\newcommand{\aufgabennummern}{% Soll die Aufgabennummern enthalten: 1 & 2 & 3 & 4 & 5 %}
\newcommand{\leerzeile}{% Soll die leere Tabellenzeile erzeugen & & & & & % }
\begin{document}
\renewcommand{\arraystretch}{1.8}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{tabularx}{\textwidth}{|l*{\anzahl}{|C}|C|}
\hline
Aufgabe & \aufgabennummern & $\Sigma$\\
\hline
maximale Punktzahl & \punkte & \summe\\
\hline
erreichte Punkte & \leerzeile & \\
\hline
\end{tabularx}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Es sollen idealerweise nur die Punkte in \punkte eingegeben werden, der Rest soll "berechnet" werden. Ich habe mit l3regex experimentiert, aber nicht zum gewünschten Ergebnis gekommen.

Der erste Versuch war

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\documentclass[12pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage{l3regex}
\ExplSyntaxOn
\tl_new:N \l_my_tl
\cs_new:Npn \punkteZeile #1 {
\tl_set:Nx \l_my_tl {#1}
\regex_replace_all:nnN { , } { & } \l_my_tl
\tl_use:N \l_my_tl
}
\ExplSyntaxOff
\newcommand{\punkte}{2,4,5,1,10}
\begin{document}
\renewcommand{\arraystretch}{1.8}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{tabularx}{\textwidth}{|l*{5}{|C}|C|}
\hline
Aufgabe & 1 & 2 & 3 & 4 & 5 & $\Sigma$\\
\hline
maximale Punktzahl & \punkteZeile{\punkte} & 22\\
\hline
erreichte Punkte & & & & & & \\
\hline
\end{tabularx}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Dies klappt aber nicht. Ich hab dann weiterhin mit \regex_count experimentiert, um die Anzahl der Einträge in der Liste zu ermitteln. Hier bin ich überhaupt nicht weitergekommen.

gefragt 07 Jan '17, 18:59

tom75's gravatar image

tom75
2.2k287984
Akzeptiert-Rate: 57%

bearbeitet 07 Jan '17, 19:27

Sieht für mich so aus, als wolltest Du irgendwelche Aufgaben und dazu einen Punkte/Notenspiegel setzen. Für so etwas gibt es fertige Pakete wie exsheets.

(07 Jan '17, 20:41) saputello

@saputello Nein, das ist nur für das Minimalbeispiel so gewählt, ich brauch es für einen anderen Zweck, bei dem es aber auch um Zahlen geht. Nur ist das Originalbeispiel sehr umfangreich und ich habe es auf die Punkte verkürzt.

(07 Jan '17, 21:14) tom75

Schonmal pgfplotstable versucht?

(08 Jan '17, 14:08) cis

Da die Punkte eine durch Komma separierte Liste darstellen, kann man diese einfach mit Hilfe von \@for abarbeiten. Die Anweisung ist im LaTeX-Kern definiert und in source2e.pdf dokumentiert:

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\documentclass[12pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\newcounter{anzahl}
\newcounter{summe}
\makeatletter
\newcommand*{\processpunkteliste}[1]{%
\setcounter{anzahl}{0}%
\setcounter{summe}{0}%
\let\aufgabennummern\@empty
\let\leerzeile\@empty
\let\punkte\@empty
\@for \reserved@a:=#1\do{
\stepcounter{anzahl}%
\addtocounter{summe}{\reserved@a}%
\edef\aufgabennummern{\aufgabennummern & \theanzahl}%
\edef\leerzeile{\leerzeile &}%
\edef\punkte{\punkte & \reserved@a}%
}%
}
\makeatother
\processpunkteliste{2,4,5,1,10}
\begin{document}
\renewcommand{\arraystretch}{1.8}
\begin{tabular}{|l*{\value{anzahl}}{|r}|r|}
\hline
Aufgabe \aufgabennummern & $\Sigma$\\
\hline
maximale Punktzahl \punkte & \thesumme\\
\hline
erreichte Punkte \leerzeile & \\
\hline
\end{tabular}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Punktetabelle

Sollte es auch gebrochene Punktezahlen geben, kann natürlich nicht mehr einfach ein Zähler für die Punkte verwendet werden. In diesem Fall muss man dann auf andere Mittel wie das Paket fp oder dessen l3-Pedant zurückgreifen.

Natürlich könnte man auch einen Datensatz mit datatool verwenden, um die Tabelle anzulegen. Wenn die Aufgabe aber wirklich so einfach ist, wäre das mit Kanonen auf Spatzen geschossen. Daher werde ich es vorerst auch nicht zeigen.

Permanenter link

beantwortet 08 Jan '17, 13:36

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 08 Jan '17, 13:39

@saputello Danke!

(10 Jan '17, 11:11) tom75

In ConTeXt MKIV kann man mit dem database-Modul direkt CSV verwenden.

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\usemodule[database]
\defineseparatedlist
[points]
[separator=comma,
left=\NC,last=\NC\NR,
before=\startTABLE,after=\stopTABLE]
\starttext
\startseparatedlist[points]
Aufgabe, 1, 2, 3, 4, 5, $\Sigma$
maximale Punktzahl, 2, 4, 5, 1, 10, 22
erreichte Punkte
\stopseparatedlist
\stoptext
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

Zusammen mit dem spreadsheet-Modul kann man dann auch gleich die Punkte zusammenrechnen.

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\usemodule[database,spreadsheet]
\defineseparatedlist
[points]
[separator=comma,
left=\NC,last=\NC\NR,
before=\startTABLE,after=\stopTABLE]
\starttext
\startspreadsheet
\startseparatedlist[points]
Aufgabe, 1, 2, 3, 4, 5, $\Sigma$
maximale Punktzahl, 2, 4, 5, 1, 10, 22
erreichte Punkte, \getspr{1}, \getspr{3}, \getspr{2}, \getspr{0}, \getspr{9}, \getspr{B[3] + C[3] + D[3] + E[3] + F[3]}
\stopseparatedlist
\stopspreadsheet
\stoptext
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

alt text

Permanenter link

beantwortet 08 Jan '17, 11:32

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 08 Jan '17, 11:39

Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×258
×2
×1

gestellte Frage: 07 Jan '17, 18:59

Frage wurde gesehen: 7,685 Mal

zuletzt geändert: 10 Jan '17, 11:11