summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/nox/nox.sty
blob: 0038afa6e5ad290f5c8b6b3ba670f183a87d41f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
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