\NeedsTeXFormat{LaTeX2e}[1995/06/01] \ProvidesPackage{nox}[2013/06/09 v1.0 Tabellengebastel (ctansearch/rais)] \long\def\readme#1{\newwrite\readme% \immediate\openout\readme=readme\relax \immediate\write\readme{#1}\immediate\closeout\readme} \newcommand*\tn@warn[1]{\PackageWarning{nox}{#1}}% damit man den Paketnamen % nicht für jede Warnung mitzuschleppen % braucht \newcommand*\tn@info[1]{\PackageInfo{nox}{#1}} \newcommand*\tn@table@align{} \newif\iftn@cstreset \DeclareOption{c}{\renewcommand*\tn@table@align{c}}% Optionen an longtable angepasst 2013-06-09-rais \DeclareOption{l}{\renewcommand*\tn@table@align{l}} \DeclareOption{r}{\renewcommand*\tn@table@align{r}} \DeclareOption{colspecresetstable}{\tn@cstresettrue}% ++ 2013-06-09-rais \DeclareOption{colspecstaysintable}{\tn@cstresetfalse}% ++ 2013-06-09-rais \DeclareOption*{\tn@warn{Unknown option `\CurrentOption' (ignored)}} \ExecuteOptions{l,colspecresetstable}% wg. neuer Option 2013-06-09-rais \ProcessOptions\relax \RequirePackage{array} \RequirePackage{longtable}% wenn schon longtable verwendet wird, dann hier laden und nicht erst im Dokument 2013-06-09-rais \newif\iftnresume \newtoks\tn@currenttab \newcommand*\tn@tmpa{}% wird andernorts überschrieben \newcommand*\tn@tmpb{}% wird andernorts überschrieben \newcommand*\tn@currentelement{}% \newcommand*\tn@addcell{} \newcommand*\tn@captiontext{}% wird andernorts überschrieben \newcommand*\tn@lintab{}% Platzhalter für die lineare Tabelle \newcounter{tn@element}% aktuelles Element \newcounter{tn@elements}% bisher abgearbeitete Elemente \newcounter{tn@lastelement}% das letzte aktuell zu bearbeitende Element \newcounter{tn@tabline} \newcounter{tn@tabcol}[tn@tabline] \newcounter{tn@tabcell}%addbyctans{9.6.13} \newcounter{tn@table} \newcounter{tn@tmp} \newcommand\deflintab[1]{% \ifnum\value{tn@elements}<\value{tn@element}\relax % Test und Warnung ergänzt, % sollten in der bisherigen Tabelle noch unbearbeitete Elemente anstehen % (das Gegenstück zu `Current element list exhausted') 2013-06-09-rais \addtocounter{tn@element}{-\value{tn@elements}}% \tn@warn{\arabic{tn@element} elements lost!^^J % You may have used `\string\deflintab' a little too soon. ^^J Missing tntable[x]{y} for \arabic{tn@element} elements}% %addbyctans{9.06.13 \fi \def\tn@lintab{#1}% \iftn@cstreset\relax\else %wenn eine Neudefinition der Spaltenanzahl keine neue Tabelle beginnen soll, \stepcounter{table}% beginnt mit einer neuen Tabellendefinition auch eine neue Tabelle 2013-06-09-rais \fi \setcounter{tn@elements}{0}% \setcounter{tn@table}{0}% eigentlich weiss man mit dem \deflintab schon, dass hier % eine neue Tabelle beginnt, da kann man die Zähler hier auch schon zurücksetzen 2013-06-09-rais \setcounter{tn@tabline}{0}% \setcounter{tn@tabcol}{0}% } \let\thetn@table\thetable \newcounter{tn@effective@columns}% Anzahl effektiver Spalten \setcounter{tn@effective@columns}{3} \newcounter{tn@max@columns}% max. Anzahl effektiver Spalten \setcounter{tn@max@columns}{12}% oder was weiß ich \newlength\numbercolwidth \settowidth\numbercolwidth{0} \newcommand{\cellflush}{\raggedright}%\raggedleft,\centering addbyctans{5.6.13} \newdimen\cellheight%addbyctans{5.6.13} \setlength\cellheight{1\baselineskip}%addbyctans{5.6.13} \newdimen\basecolskip%addbyctans{5.6.13} \setlength\basecolskip{1em} \newdimen\cellwidth%addbyctans{5.6.13} \setlength\cellwidth{1\basecolskip}%addbyctans{5.6.13} \newcommand{\tntabledimen}[2]{ \setlength\cellheight{#1\baselineskip}% \setlength\cellwidth{#2\basecolskip} \tn@warn{Current tabledimen: #1\baselineskip #2\basecolskip(\basecolskip=\the\basecolskip)}% }%Zusammengefasste cellwidth und cellheight Befehle addbyctans{9.6.13} \newcommand{\linenoformat}{\textsuperscript}%addbyctans{5.6.13} %%%%% code übernommen aus mbenotes.sty, um in jeder Zelle eine Anmerkung unterbringen \@definecounter{cellnote} \def\thecellnote{\@arabic\c@cellnote} \def\@makecellmark{\hbox{\@textsuperscript{{\tiny[\@thecellmark]}}}} \def\makecellmark{\@makecellmark} \def\thecellmark{\@thecellmark} \newdimen\cellnotesep \def\cellnote{\@ifnextchar[\@xcellnote{\stepcounter{cellnote}% \protected@xdef\@thecellmark{\thecellnote}% \@cellnotemark\@cellnotetext}} \def\@xcellnote[#1]{ \begingroup \c@cellnote=#1\relax \unrestored@protected@xdef\@thecellmark{ \thecellnote}% \endgroup \@cellnotemark\@cellnotetext } \let\@doancellnote=0 \let\@endancellnote=0 \newwrite\@cellnotes \newif\if@cellnotesopen \global\@cellnotesopenfalse \def\@opencellnotes{\immediate\openout\@cellnotes=\jobname.nox\relax \global\@cellnotesopentrue} \long\def\@cellnotetext#1{% \if@cellnotesopen \else \@opencellnotes \fi \immediate\write\@cellnotes{\@doancellnote{\@thecellmark}}% \begingroup \def\next{#1}% \newlinechar='40 \immediate\write\@cellnotes{\meaning\next}% \endgroup \immediate\write\@cellnotes{\@endancellnote}} \long\def\addtocellnotes#1{% \if@cellnotesopen \else \@opencellnotes \fi \begingroup \newlinechar='40 \let\protect\string \immediate\write\@cellnotes{#1}% \endgroup} \def\cellnotemark{% \@ifnextchar[\@xcellnotemark {\stepcounter{cellnote}% \protected@xdef\@thecellmark{\thecellnote}% \@cellnotemark}} \def\@xcellnotemark[#1]{% \begingroup \c@cellnote #1\relax \unrestored@protected@xdef\@thecellmark{\thecellnote}% \endgroup \@cellnotemark} \def\@cellnotemark{% \leavevmode \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi \makecellmark \ifhmode\spacefactor\@x@sf\fi \relax} \def\cellnotetext{ \@ifnextchar [\@xcellnotenext {\protected@xdef\@thecellmark{\thecellnote}% \@cellnotetext}} \def\@xcellnotenext[#1]{\begingroup \c@cellnote=#1\relax \xdef\@thecellmark{\thecellnote}\endgroup \@cellnotetext} \def\@xcellnotenext[#1]{% \begingroup \c@cellnote=#1\relax \unrestored@protected@xdef\@thecellmark{\thecellnote}% \endgroup \@cellnotetext} \def\cellnotesname{cellnotes} \def\cellnoteheading{\subsubsection*{\footnotesize{\cellnotesname} \@mkboth{\MakeUppercase{\cellnotesname}}{\MakeUppercase{\cellnotesname}}} \mbox{ }\par\vskip-\baselineskip} \def\cellnoteformat{\rightskip\z@ \leftskip\z@ \parindent=1.8em \leavevmode\llap{\makecellmark}} \def\cellnotesize{\footnotesize}% \def\thecellnotes[#1]{\def\cellnotesname{#1}\immediate\closeout\@cellnotes \global\@cellnotesopenfalse \begingroup \makeatletter \edef\@tempa{`\string >}% \ifnum\catcode\@tempa=12% \let\@ResetGT\relax \else \edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}% \@makeother\>% \fi \def\@doancellnote##1##2>{ \def\@thecellmark{##1}\par\begingroup \@ResetGT \edef\@currentlabel{\csname p@cellnote\endcsname\@thecellmark}% \cellnoteformat} \def\@endancellnote{\par\endgroup}% \cellnoteheading{\small{\textsl{Anm.Tab. \textbf{\cellnotesname} \thetn@table-\alph{tn@table}}}}%Headline für \thecellnotes addbyctans{9.06.13} \cellnotesize \input{\jobname.nox}% \setcounter{cellnote}{0} \vspace{1.8em} \endgroup} %%%%%%%%%%%%%%%%%ende code cellnotes addbyctans{9.06.13} \newcommand{\celltitle}[1]{\noexpand\textbf{#1}\vskip0.1\baselineskip}%addbyctans{5.6.13} %gibt der Zelle einen Namen, eine Überschrift \newcommand{\celllabel}[1]{\noexpand\textbf{#1}\nox\label{#1}\vskip0.1\baselineskip}%addbyctans{11.6.13}erstellt %aus dem Namen ein Label \newcommand\cell[1]{\tn@warn{`\string\cell' out of proper environment}} \newcommand*\seteffectivecolumns[1]{% \ifnum#1>\value{tn@max@columns}\relax \tn@warn{Restricting number of columns to \arabic{tn@max@columns} (you wanted #1)}% \setcounter{tn@effective@columns}{\value{tn@max@columns}}% \else \tn@info{Accepting `#1' as number of columns}% \setcounter{tn@effective@columns}{#1}% \fi \setcounter{tn@tabcol}{0}% den Spaltenzähler zurücksetzen: % Nach Neudefinition der Spaltenanzahl ist es IMHO unlogisch, die nächste erste Tabellenzeile % an die letzte der vorherigen Teiltabelle anschliessen lassen zu wollen 2013-06-09-rais } \newenvironment{tntable}[2][]{% \renewcommand\cell[1]{% \ifnum\value{tn@tabcol}=0\relax \linenoformat{\thetn@tabline}%format of tabline addbyctans{5.6.13} \else \iftnresume \ldots \setcounter{tn@tmp}{0}% \edef\tn@tmpa{}% \loop \stepcounter{tn@tmp}\edef\tn@tmpa{\tn@tmpa&}% \ifnum\c@tn@tmp<\c@tn@tabcol\relax\repeat \tn@tmpa \global\tnresumefalse \fi \fi \stepcounter{tn@tabcol}% \ifnum\value{tn@tabcol}>\value{tn@effective@columns}\relax \stepcounter{tn@tabline}% starte neue Zeile \stepcounter{tn@tabcol}% \tabularnewline \linenoformat{\thetn@tabline}%format of tabline addbyctans{5.6.13} \fi &\vtop to \cellheight{\nox\vskip0pt %\fenestra addbyctans11.06.13 ##1\vfill\stepcounter{tn@tabcell}}%added %vtop to scale the cellheight(the height of a %line) addbyctans {5.6.13} tabcellcounter %addbyctans{9.6.13}Noch unentschieden, ob vtop %oder vbox besser ist, oder keins von beiden %&\vbox to \cellheight{##1\vfill\stepcounter{tn@tabcell}}%added %vtop to scale the cellheight(the height of a %line) addbyctans {5.6.13} tabcellcounter %addbyctans{9.6.13} }% \renewcommand*\thetable{\thetn@table-\alph{tn@table}}% \ifx\relax#1\relax %optionelles Argument leer oder nicht angegeben \iftn@cstreset %konfigurierbar gemacht 2013-06-09-rais \setcounter{tn@table}{0}% \setcounter{tn@tabcol}{0}% \setcounter{tn@tabline}% \fi \else %Test auf `resume': \edef\tn@tmpa{#1}% \edef\tn@tmpb{resume}% \ifx\tn@tmpa\tn@tmpb\relax %bisherige Tabelle soll fortgesetzt werden \tnresumetrue \addtocounter{table}{-1}% \else % weder leer noch `resume: \seteffectivecolumns{#1}% neue Anzahl (eff.) Spalten \iftn@cstreset %++ über Option konfigurierbar gemacht 2013-06-09-rais \setcounter{tn@table}{0}% % \setcounter{tn@tabcol}{0}%<-- in \seteffectivecolumns verschoben 2013-06-09-rais \setcounter{tn@tabline}{0}% \else \addtocounter{table}{-1}% neue Spaltenanzahl soll für bisherige Tabelle gelten \fi \fi \fi \refstepcounter{tn@table}% % \ifhmode\par\fi\noindent <-- das ist bei longtable auch nicht mehr notwendig 2013-06-09-rais %\minipage{\linewidth}% damit die %Tabellenüberschrift nicht vom Körper getrennt %werden kann,deaktiviert für longtable{5.6.13} % \expandafter\begin{\tn@table@align} auskommentiert und Option an longtable übergeben 2013-06-09-rais \ifx\relax#2\relax \iftnresume\relax \else \tn@warn{Empty caption text for tntable \thetable}% \xdef\tn@captiontext{#2}% \fi \else \xdef\tn@captiontext{#2}% \fi % \def\@captype{table}% damit \caption `weiß', daß es hier um eine Tabelle geht -- auskommentiert, \caption in longtable verschoben 2013-06-09-rais \begin{longtable}[\tn@table@align]{@{}>{\cellflush}p{\numbercolwidth}*{\arabic{tn@effective@columns}}{>{\cellflush}p{\cellwidth}}@{}}%\cellflush addbyctans \caption{\tn@captiontext}\\% innerhalb longtable ist \caption mit \\ abzuschliessen 2013-06-09-rais }{% %\addtocounter{table}{-1}%decrease counter{table}of longtable addbyctans{5.6.13} % ^^^ mit der Verschiebung der \caption obsolet geworden 2013-06-09-rais \end{longtable} % \expandafter\end{\tn@table@align} deaktiviert für longtable 2013-06-09-rais %\endminipage deaktiviert für longtable{5.6.13} \vskip2\baselineskip } \newcommand*\tntab[3][]{% \setcounter{tn@lastelement}{\value{tn@elements}}% \addtocounter{tn@lastelement}{#2}% \setcounter{tn@element}{0}%Schleifenzähler \tn@currenttab={}% und Tabelleninhalt initialisieren \begin{tntable}[#1]{#3} \@for\tn@currentelement:=\tn@lintab\do{% \stepcounter{tn@element}% \ifnum\value{tn@element}>\value{tn@elements}\relax \ifnum\value{tn@element}>\value{tn@lastelement}\relax \else \edef\tn@addcell{\noexpand\tn@currenttab={\the\tn@currenttab\noexpand\cell{\tn@currentelement}}}% \tn@addcell \fi \fi }% \the\tn@currenttab \end{tntable} \ifnum\thecellnote>0 \thecellnotes[] \fi%cellnotes werden nur ausgegeben,wenn deren Zähler >0 ist addbyctans{9.06.13} \ifnum\value{tn@element}<\value{tn@lastelement}\relax \tn@warn{Current element list exhausted!^^J You wanted to get \arabic{tn@lastelement}, but only \arabic{tn@element} were present} \fi \setcounter{tn@elements}{\value{tn@lastelement}}% Start für Folgetabelle festlegen }%\tntab[Anzahl Spalten]{Anzahl Elemente}{Überschrift} \def\nox{\noexpand}%shortcut for \noexpand %addbyctans{9.6.13} \def\amp{&} %ampersand für noexpand in Tabellen addbyctans{9.6.13} \endinput