PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dynamische Tabelle



zod
23-11-2009, 23:00
Hallo. Eine Tabelle soll sich über die ganze Seite erstrecken und eine dynamische Anzahl Spalten haben, wobei der Tabellenkopf die Zahlen von "n" bis "m" beinhaltet.

Bisher habe ich dies:


\usepackage{forloop}

\newcommand{\punkteliste}[2]{\begin{tabular*}{\linewidth}[]{@{\extracolsep\fill}}

\newcounter{punktelistectr}
\forloop{punktelistectr}{#1}{\value{punktelistectr } < #2 } %
{%
\arabic{punktelistectr} &
}
#2 \\

\hline

\forloop{punktelistectr}{#1}{\value{punktelistectr } < #2 } %
{%
&
} \\
\end{tabular*}
}

\punkteliste{5}{8}


Da fehlt natürlich die Anzahl / Ausrichtung der Spalten. Wie kann man die dynamisch einbringen?

rais
24-11-2009, 07:44
Moin moin,

Hallo. Eine Tabelle soll sich über die ganze Seite erstrecken und eine dynamische Anzahl Spalten haben, wobei der Tabellenkopf die Zahlen von "n" bis "m" beinhaltet.

Bisher habe ich dies:


\usepackage{forloop}

\newcommand{\punkteliste}[2]{\begin{tabular*}{\linewidth}[]{@{\extracolsep\fill}}

\newcounter{punktelistectr}

Afaik ist \newcounter innerhalb einer Makrodefinition unzulässig.


Da fehlt natürlich die Anzahl / Ausrichtung der Spalten. Wie kann man die dynamisch einbringen?
Wie sollen die Spalten denn ausgerichtet werden? Zentriert?


\documentclass{article}
\usepackage{forloop,tabularx}
\newcounter{punktelistectr}
\newcounter{punkte}
\newcommand{\punkteliste}[2]{%
\setcounter{punkte}{#2}%
\addtocounter{punkte}{-#1}%
\stepcounter{punkte}%<-- also punkte = m-n+1 = Anzahl Spalten[1]
\begin{center}%
\begin{tabularx}{\linewidth}[]{@{}*{\thepunkte}{>{\centering\arraybackslash}X}@{}}
\forloop{punktelistectr}{#1}{\value{punktelistectr } < #2 } %
{%
\thepunktelistectr &
}
#2 \\
\hline
\forloop{punktelistectr}{#1}{\value{punktelistectr } < #2 } %
{%
&
} \\
\end{tabularx}
\end{center}
}
\begin{document}
\punkteliste{5}{8}
\punkteliste{12}{18}
\end{document}

wobei mir Dein zweiter \forloop schleierhaft ist.

[1] m>=n vorausgesetzt, ggf. musst Du im \punkteliste-Makro den Fall m<n abfangen ... und vllt auch gleich m-n>MAXCOLUMNS, den Du Dir gleich mit ausdenken darfst.;-)

MfG

zod
24-11-2009, 11:39
Das ist genau was ich wollte! Danke!

Das abfangen der "Fehler" werde ich später machen, da ich zum einen der einzige bin der es benutzt und zum anderen es schon echt dämlich wäre wenn man so etwas einfaches falsch benutzt :D

Die zweite Schleife erzeugt nur eine zweite Zeile, da es einen inneren Rahmen gibt.


\begin{tabularx}{\linewidth}[]{@{}*{\thepunkte}{>{\centering\arraybackslash}X|}@{}>{\centering\arraybackslash}X}

Zudem ist eine letzte Spalte hinzugekommen in der ein Summenzeichen steht ;)

Vielen Dank für die Hilfe!