From 71a5d913aca43d138491dd99f2f90ea20b723176 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 27 Jun 2013 23:35:08 +0000 Subject: nox (13jun13) git-svn-id: svn://tug.org/texlive/trunk@30991 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/nox/nox.sty | 299 ++++++++++++++++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/nox/nox.sty (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/nox/nox.sty b/Master/texmf-dist/tex/latex/nox/nox.sty new file mode 100644 index 00000000000..0038afa6e5a --- /dev/null +++ b/Master/texmf-dist/tex/latex/nox/nox.sty @@ -0,0 +1,299 @@ +\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 -- cgit v1.2.3