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
\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}

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
\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}

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.1k47483
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
\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}

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
10.8k103963
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
\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

alt text

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

Öffne in Overleaf
\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

alt text

Permanenter link

beantwortet 08 Jan '17, 11:32

Henri's gravatar image

Henri
14.6k53340
Akzeptiert-Rate: 46%

bearbeitet 08 Jan '17, 11:39

Deine Antwort
Vorschau umschalten

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

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×238
×2
×1

gestellte Frage: 07 Jan '17, 18:59

Frage wurde gesehen: 3,755 Mal

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