
Zitat von
mechanicus
Hi,
viel Spaß

Mit deinem Ansatz:
Danke, für das Beispiel klappt das gut.
Wenn ich es aber versuche, in ein größeres Projekt einzupflegen, funktioniert das Ganze nicht mehr. Ich habe leider keine Ahnung warum. Tut mir leid, wenn im nächsten Beispiel die Sachlage nun komplexer ist, aber ich habe schon viel Code rausgeworfen.
Die Idee besteht darin, Tabellen nicht mehr so kompliziert mit "&" und unter Berücksichtigung der Spaltenreihenfolge in die .tex Datei zu schreiben, sondern mittels einer key-value-liste.
Zeilen sollen beispielsweise mittels
Code:
\myrow{name={Mickey},
geburt={32.03.2001},
steuer={90}}
eingegeben werden. Dabei spielen Reihenfolge und Umfang der Einzelnen keys keine Rolle, da mit
Code:
\begin{myfltable}{tabpreambel={r|r|r},columns={name,geburt,steuer}}
die eigentliche Tabellenformatierung nicht in \myrow{}, sondern in einer Umgebung gegeben ist. Ich hoffe es wird verständlich, wozu das dient (komfortable Dateneingabe, die bei Bedarf schnelle Formatierungsänderung erlaubt, indem nur die keys der Umgebung geändert werden, nicht mehr die eigentlichen row-Einträge). Falls es schon Pakete gibt, die das zur Verfügung stellen, bin ich für Hinweise dankbar.
MB:
Code:
\documentclass[ngerman]{scrartcl}
\usepackage{filecontents}
\begin{filecontents}{fltable.sty}
%%Pakete
\usepackage{xkeyval,forloop,calc,array}
%%%%%%keys für env:fltable}
%%Präambel
\define@key{fltable}{tabpreamble}{\newcolumntype{\tabpreamble}{#1}}
%%Tabellenspalten
\newcounter{colloop}\newcounter{maxflcol}
\define@key{fltable}{columns}{%
\def\vara{#1}%liste definieren
\setcounter{colloop}{0}
\@for\mycolumn:=\vara\do{%
\stepcounter{colloop}%
\expandafter\edef\csname mycolumn\the\value{colloop}\endcsname{\mycolumn}}%erzeuge die Spalten\mycolumn1 usw.
\setcounter{maxflcol}{\value{colloop}}%
}
%%%keys für coltypen festlegen
\newcommand{\makenewcoltype}[2]{%#1intern#2ausgabename
%%%%%1. keydef und Makro \mytype#1 erzeugen
\define@key{mycoltype}{#1}{%
\@namedef{mycoltype#1content}{##1}%
}%
\define@key{mycoltype}{#1name}{%
\@namedef{mycoltype#1name}{##1}%
}%
\@namedef{mycoltype#1name}{#2}%
\presetkeys{mycoltype}{#1={Voreinstellung}}{}%
}
%%drei coltypen
\makenewcoltype{name}{Name}
\makenewcoltype{geburt}{Geburtsdatum}
\makenewcoltype{steuer}{SteuerID}
%%%Verknüpfung von \mycol1 und \mycoltypename#1
\newcommand{\printfltab}[1]{%#1 entweder "`name"' oder "`content"'
\def\@tempb{}%
\forloop{colloop}{1}{\value{colloop} < \value{maxflcol}}%
{%%gehe durch jede Spalte und
% \edef\@tempb{\@tempb
\csname mycoltype\csname mycolumn\the\value{colloop}\endcsname#1\endcsname&}
% }%
%%das letzte Stück
% \edef\@tempb{\@tempb
\csname mycoltype\csname mycolumn\the\value{colloop}\endcsname#1\endcsname%
% }
% \@tempb
\\%
}
\presetkeys{fltable}{%Voreinstellungen
tabpreamble={||r||r||r||}
,columns={name,steuer,geburt}
}{}
\newenvironment{myfltable}[1]{%begine tabelle
\setkeys{fltable}{#1}
\begin{tabular}{\tabpreamble}
\hline\printfltab{name}\hline%Tabellenkopf
}{%Ende Tabelle
\hline\end{tabular}}
\newcommand{\myrow}[1]{%
\setkeys{mycoltype}{#1}
\printfltab{content}%Inhalte ausgeben
}
\end{filecontents}
\usepackage{fltable}
\begin{document}
Tabelle mit Voreinstellung:\par
\begin{myfltable}{}
\myrow{
name={Mickey Maus}
,steuer={123}
,geburt={32.03.2011}
}
\end{myfltable}
\vspace*{1cm}
Tabelle mit angepassten Spalten:\par
\begin{myfltable}{
tabpreamble={|l|l|r|}
,columns={name,geburt,steuer}
}
\myrow{name={Mickey Maus}
,steuer={123}
,geburt={32.03.2011}
}
\end{myfltable}
\end{document}
Lesezeichen