Anzeige:
Seite 2 von 2 ErsteErste 12
Ergebnis 16 bis 24 von 24

Thema: Tabellengebastel- Ideen gesucht

  1. #16
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Zitat Zitat von ctansearch Beitrag anzeigen
    Hallo rais, liest Du noch mit?
    sicher, ich bin derzeit nur ein wenig -- hmm -- asynchron zur MET.
    Zitat Zitat von ctansearch Beitrag anzeigen
    Ich würde das gerne als Paket bei CTAN hochladen., wenn Du einverstanden bist.
    Nur zu (unser Ideenaustausch war ja auch schon nicht gerade privat).
    Zitat Zitat von ctansearch Beitrag anzeigen
    Bei Interesse stelle ich den aktuellen Stand hier ein.
    An Interesse mangelt es nicht. OTOH kann ich warten, bis es auf CTAN zur Verfügung steht.
    Zitat Zitat von ctansearch Beitrag anzeigen
    Es ist ziemlich schwierig, in einem langen Text die Gruppierungen zu erkennen und man hat zeimlich viele Korrekturen, wenn die Zellen nicht mehr optimal gefüllt werden.
    Wann wurde aus `Tabelle' ein `langer Text'?
    Zitat Zitat von ctansearch Beitrag anzeigen
    das Verschieben der \caption führt zu einer Fehlermeldung.
    Die Anzahl an Fehlermeldungen ist nicht entscheidend, vielmehr die Fehlermeldung selbst.
    BTW, Du hast schon daran gedacht, daß \caption innerhalb einer longtable mit \\ abgeschlossen werden muss?

    Ein paar Gedanken hab ich mir nochmal zu der Frage gemacht, wann genau der Tabellenzähler erhöht werden sollte (und dabei auch gleich das Verhalten konfigurierbar gemacht, ob eine neue Spaltenanzahl eine neue Tabelle anlegen soll, oder nicht).
    Zwar finde ich die Verwendung von longtable immer noch übertrieben, aber wenn sie denn verwendet werden soll, vereinfacht das ein paar andere Dinge gleich mit:
    Code:
    \documentclass[a4paper]{article}%
    \usepackage[utf8]{inputenc}%
    \usepackage[ngerman]{babel}%
    \usepackage{filecontents}
    \begin{filecontents*}{tablenumbers3.sty}
    \NeedsTeXFormat{LaTeX2e}[1995/06/01]
    \ProvidesPackage{tablenumbers3}[2013/06/09 v0.3.1 Tabellengebastel (ctansearch/rais)]
    \newcommand*\tn@warn[1]{\PackageWarning{tablenumbers3}{#1}}% damit man den Paketnamen nicht für jede Warnung mitzuschleppen braucht
    \newcommand*\tn@info[1]{\PackageInfo{tablenumbers3}{#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@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}%
      \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{\ldots}
    \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{10pt}
    \newdimen\cellwidth%addbyctans{5.6.13}
    \setlength\cellwidth{1\basecolskip}%addbyctans{5.6.13}
    \newcommand{\linenoformat}{\textsuperscript}%addbyctans{5.6.13}
    \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{##1}%added vtop to scale the cellheight(the height of a line) addbyctans {5.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]{@{}>{\raggedleft}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}
    }
    \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\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}
    \endinput
    \end{filecontents*}
    \usepackage[colspecstaysintable,c]{tablenumbers3}
    \begin{document}%
    \renewcommand{\cellflush}{\raggedright}
    \setlength\cellheight{1\baselineskip}%addbyctans{5.6.13}
    \setlength\cellwidth{1\basecolskip}%addbyctans{5.6.13}
    \deflintab{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}
    \tntab[4]{6}{6 elemente in 4 spalten}
    \tntab[5]{6}{6 elemente in 5 spalten}% optionalen Parameter von 4 auf 5 geändert, damit die Tabellenüberschrift passt 2013-06-09-rais
    \setlength\cellheight{8\baselineskip}%addbyctans{5.6.13}
    \setlength\cellwidth{9\basecolskip}%addbyctans{5.6.13}
    \deflintab{{Eine Menge Worte die in einer,Tabelle dargestellt werden und eine
      Menge Text in die Spalten setzen, },{und die durch Kommata getrennt sind}}
    \tntab[4]{4}{}
    \listoftables
    \end{document}
    MfG aus dem Land der aufgehenden Sonne
    Geändert von rais (09-06-2013 um 07:46 Uhr) Grund: da hat sich doch ein 2003 eingeschlichen gehabt
    Rainer
    There's nothing a good whack with a hammer won't fix!

  2. #17
    ctansearch
    Gast
    @rais

    Hallo rais, habe nun das Tabellengebastel unter dem Namen "NOX" nach CTAN hochgeladen. Es hat noch eine Masse Erweiterungen erfahren und funktioniert sehr gut.
    Schau mal rein.

  3. #18
    ctansearch
    Gast
    Sorry. hochladen hat nicht geklappt.
    Aktuelle (und noch nicht fertige) Version jetzt unter
    http://biocoen.org
    (nox)
    zu finden.
    Geändert von ctansearch (12-06-2013 um 23:26 Uhr)

  4. #19
    ctansearch
    Gast
    @rais
    Hallo rais, hier eine Möglichkeit zum Umgang mit Registern, die auch für die Manipulation des Arrays \deflintab von Nutzen sein könnte.(bezgl. Vermeidung der mehrfachen Abarbeitung der \deflintab-Parameter.) Vielleicht kannst Du damit was anfangen. Unbefriedigend ist noch die \collectregisters - Abteilung, die durch eine while Schleife besser formuliert werden könnte. Alles ist reiner TeX-Code.
    Gruß ctansearch

    Code:
    {\bf \TeX-Code}
    \parindent=0pt
    \vskip2\baselineskip
    \newcount\newregister%
    \def\testtext{Das ist nur ein Text, um die Zeilen zu fuellen.}
    \newcount\lastregister%
    \def\writetonewregister#1{\setbox0=\hbox{{\bf Anmerkungen}} \advance\newregister
    by 1 \expandafter\setbox\the\newregister=\hbox{#1}\kern-4pt$^{\the\newregister}$}%
    \def\collectregisters{
    \lastregister=\the\newregister%
    \advance\lastregister by 1 
    \expandafter\setbox\the\lastregister=\vbox{
    \vskip2\baselineskip%
    \box0
    \ifnum\lastregister=0  \box0 \fi
    \ifnum\lastregister>0  \box1 \fi
    \ifnum\lastregister>1  \box2 \fi
    \ifnum\lastregister>2  \box3 \fi
    \ifnum\lastregister>3  \box4 \fi
    \ifnum\lastregister>4  \box5 \fi
    \ifnum\lastregister>5  \box6 \fi
    \ifnum\lastregister>6  \box7 \fi
    \ifnum\lastregister>7  \box8 \fi
    \ifnum\lastregister>8  \box9 \fi
    \ifnum\lastregister>9  \box10 \fi
    \ifnum\lastregister>10 \box11 \fi
    \ifnum\lastregister>11 \box12 \fi
    \ifnum\lastregister>12 \box13 \fi
    \ifnum\lastregister>13 \box14 \fi
    \ifnum\lastregister>14 \box15 \fi
    \ifnum\lastregister>15 \box16 \fi
    \ifnum\lastregister>16 \box17 \fi
    \ifnum\lastregister>17 \box18 \fi
    \ifnum\lastregister>18 \box19 \fi
    \ifnum\lastregister>19 \box20 \fi
    \ifnum\lastregister>20 \box21 \fi
    \ifnum\lastregister>21 \box22 \fi
    \ifnum\lastregister>22 \box23 \fi
    \ifnum\lastregister>23 \box24 \fi
    \ifnum\lastregister>24 \box25 \fi
    \ifnum\lastregister>25 \box26 \fi
    }}%
    
    \def\writenewregister{\collectregisters \vskip1\baselineskip\vbox{\box\the\lastregister
    \message{\the\lastregister boxes are freed }\hfill}}%
    %endofdefintion
    \testtext \writetonewregister{Anmerkung 1}
    \testtext \writetonewregister{Anmerkung 2}
    \testtext \writetonewregister{Anmerkung 3}
    \testtext \writetonewregister{Anmerkung 4}
    \testtext \writetonewregister{Anmerkung 5}
    \testtext \writetonewregister{Anmerkung 6}
    \writenewregister
    \testtext \writetonewregister{Anmerkung 7}
    \testtext \writetonewregister{Anmerkung 8}
    \testtext \writetonewregister{Anmerkung 9}
    \testtext \writetonewregister{Anmerkung 10}
    \testtext \writetonewregister{Anmerkung 11}
    \testtext \writetonewregister{Anmerkung 12}
    \testtext \writetonewregister{Anmerkung 13}
    \writenewregister
    \bye
    %
    Geändert von ctansearch (15-06-2013 um 01:07 Uhr)

  5. #20
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Moin ctansearch,
    Zitat Zitat von ctansearch Beitrag anzeigen
    @rais
    Hallo rais, hier eine Möglichkeit zum Umgang mit Registern, die auch für die Manipulation des Arrays \deflintab von Nutzen sein könnte.(bezgl. Vermeidung der mehrfachen Abarbeitung der \deflintab-Parameter.)
    ich glaube nicht, daß Boxregister hier gewinnbringend angewendet werden können. Was würdest Du in so ein Register packen wollen? Einzelne Elemente?
    Wie viele Elemente soll eine Tabelle haben dürfen?
    Zwar ist mit den e-TeX-Erweiterungen die alte Grenze von 256 Boxregistern nicht mehr gegeben, aber selbst bei einer ausreichenden Anzahl an verfügbaren Boxregistern sehe ich erstmal einen ziemlichen Aufwand, das ganze umzusetzen.
    - Um nicht mit anderen Paketen in Konflikt zu geraten, die ebenfalls Boxregister verwenden, müssten alle verwendeten Boxregister per \newbox bzw. \newsavebox agefordert werden (wobei mir nicht klar ist, ob eine Reihe von Boxregistern zwingend aufsteigende und lückenlose Nummern erhalten).
    - Da die Tabelle definiert wird, bevor die Spaltenbreite bekannt ist, müsste jede dieser Boxen bei der eigentlichen Tabellenerstellung wieder auseinandergenommen werden (etwa mit \unhbox), sonst kümmert sich eine bereits gesetzte Box herzlich wenig um solche Dinge wie `Spaltenbreite'.

    OTOH kann man die Tabellenreste nicht einfach in einem \edef einsammeln: dann geht eine etwaige Gruppierung innerhalb eines Elements flöten.
    Also hab ich etwas mit Tokenregistern gespielt:
    Code:
    \documentclass[a4paper]{article}%
    \usepackage[utf8]{inputenc}%
    \usepackage[ngerman]{babel}%
    \usepackage{filecontents}
    \begin{filecontents*}{tablenumbers3.sty}
    \NeedsTeXFormat{LaTeX2e}[1995/06/01]
    \ProvidesPackage{tablenumbers3}[2013/06/17 v0.3.2 Tabellengebastel (ctansearch/rais)]
    \newcommand*\tn@warn[1]{\PackageWarning{tablenumbers3}{#1}}% damit man den Paketnamen nicht für jede Warnung mitzuschleppen braucht
    \newcommand*\tn@info[1]{\PackageInfo{tablenumbers3}{#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
    \newif\iftncheckelements % Gesamtanzahl nur im ersten tntab-Aufruf setzen 2013-06-17-rais
    \newtoks\tn@currenttab
    \newtoks\tn@lintab % Platzhalter für die lineare Tabelle auf Tokenregister geändert 2013-06-17-rais
    \newtoks\tn@tmplintab % Platzhalter für gekürzte Tabelle 2013-06-17-rais
    \newcommand*\tn@tmpa{}% wird andernorts überschrieben
    \newcommand*\tn@tmpb{}% wird andernorts überschrieben
    \newcommand*\tn@empty{}%
    \newcommand*\tn@currentelement{}%
    \newcommand*\tn@addcell{}
    \newcommand*\tn@captiontext{}% wird andernorts überschrieben
    \newcounter{tn@element}% aktuelles Element
    \newcounter{tn@elements}% bisher abgearbeitete Elemente
    \newcounter{tn@lastelement}% das letzte aktuell zu bearbeitende Element
    \newcounter{tn@totalelements}% Gesamtanzahl Elemente 2013-06-17-rais
    \newcounter{tn@tabline}
    \newcounter{tn@tabcol}[tn@tabline]
    \newcounter{tn@table}
    \newcounter{tn@tmp}
    \newcommand\deflintab[1]{%
      \ifnum\value{tn@totalelements}=0\relax %Test/Warnung ergänzt 2013-06-17-rais
        \iftncheckelements
          \tn@warn{Unknown number of elements lost!^^J
              You may have used `\string\deflintab' before, without^^J
              using any of its elements}%
        \fi
      \else
        \ifnum\value{tn@totalelements}<\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
    % Test auf tn@totalelements geändert 2013-06-17-rais
          \addtocounter{tn@element}{-\value{tn@totalelements}}%
          \tn@warn{\arabic{tn@element} elements lost!^^J
            You may have used `\string\deflintab' a little too soon}%
        \fi
      \fi
      \tn@lintab={#1}% token! 2013-06-17-rais
      \iftn@cstreset\relax\else %wenn eine Neudefinition der Spaltenanzahl keine neue Tabelle beginnen soll,
        \stepcounter{table}% beginnt mit einer neuen Tabellendefinition auch keine 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}%
      \tncheckelementstrue% nächster \tntab soll Gesamtanzahl Elemente feststellen 2013-06-17-rais
    }
    \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{\ldots}
    \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{10pt}
    \newdimen\cellwidth%addbyctans{5.6.13}
    \setlength\cellwidth{1\basecolskip}%addbyctans{5.6.13}
    \newcommand{\linenoformat}{\textsuperscript}%addbyctans{5.6.13}
    \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{##1}%added vtop to scale the cellheight(the height of a line) addbyctans {5.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]{@{}>{\raggedleft}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}
    }
    \newcommand*\showtab[1]{% zum Debuggen 2013-06-17-rais
      \begingroup
        \message{+-+-+ #1:}%
        \c@tn@element=0\relax
        \@for\tn@currentelement:=\the\tn@lintab\do{%
          \advance\c@tn@element by 1
          \tn@info{element \thetn@element: `\tn@currentelement'}%
        }%
      \endgroup
    }
    \newcommand*\tn@nop[1]{#1}
    \newcommand*\tntab[3][]{%
    %  \setcounter{tn@lastelement}{\value{tn@elements}}%
    %  \addtocounter{tn@lastelement}{#2}%
      \setcounter{tn@lastelement}{#2}% an gekürzten Tabelleninhalt angepasst 2013-06-17-rais
      \setcounter{tn@element}{0}%Schleifenzähler
      \tn@currenttab={}% und Tabelleninhalt initialisieren
      \tn@tmplintab={}% Sammelstelle für Tabellenrest
      \edef\tn@empty{\the\tn@tmplintab}% f.Vergleich
      \begin{tntable}[#1]{#3}
        \@for\tn@currentelement:=\the\tn@lintab\do{%
          \stepcounter{tn@element}%
    %      \ifnum\value{tn@element}>\value{tn@elements}\relax% obsolet 2013-06-17-rais
          \ifnum\value{tn@element}>\value{tn@lastelement}\relax
    % Alles, was nach tn@lastelement steht, wandert in die gekürzte Tabelle 2013-06-17-rais
            \edef\tn@tmpb{\the\tn@tmplintab}%
            \ifx\tn@empty\tn@tmpb\relax
              \edef\tn@addcell{\noexpand\tn@tmplintab={\noexpand\tn@nop{\tn@currentelement}}}% erstes Element in Resttabelle
            \else
              \edef\tn@addcell{\noexpand\tn@tmplintab={\the\tn@tmplintab,\noexpand\tn@nop{\tn@currentelement}}}% alle Folgeelemente
            \fi
            \tn@addcell
          \else
            \edef\tn@addcell{\noexpand\tn@currenttab={\the\tn@currenttab\noexpand\cell{\tn@currentelement}}}%
              \tn@addcell
          \fi
    %      \fi
        }%
        \edef\tn@addcell{\noexpand\global\noexpand\tn@lintab={\the\tn@tmplintab}}%
        \tn@addcell% neuer Tabelleninhalt = Rest
        \iftncheckelements  %Gesamtanzahl Elemente (nur im ersten Aufruf gültig) 2013-06-17-rais
          \setcounter{tn@totalelements}{\value{tn@element}}%
          \global\tncheckelementsfalse  %erst nach nächstem \deflintab wieder aktiv
        \fi
        \the\tn@currenttab
      \end{tntable}
      \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}
    \endinput
    \end{filecontents*}
    \usepackage[colspecstaysintable,c]{tablenumbers3}
    \begin{document}%
    \renewcommand{\cellflush}{\raggedright}
    \setlength\cellheight{1\baselineskip}%addbyctans{5.6.13}
    \setlength\cellwidth{1\basecolskip}%addbyctans{5.6.13}
    \deflintab{1,2,3,4,5,6,7,8,{9,10},11,12,13,14,15,16,17,18,19,20}
    \showtab{Nach Definiton}%
    \tntab[4]{6}{6 elemente in 4 spalten}
    \showtab{Nach erster Teiltabelle}%
    \tntab[5]{6}{6 elemente in 5 spalten}% optionalen Parameter von 4 auf 5 geändert, damit die Tabellenüberschrift passt 2013-06-09-rais
    \showtab{Nach zweiter Teiltabelle}%
    \setlength\cellheight{8\baselineskip}%addbyctans{5.6.13}
    \setlength\cellwidth{9\basecolskip}%addbyctans{5.6.13}
    \deflintab{{Eine Menge Worte die in einer,Tabelle dargestellt werden und eine
      Menge Text in die Spalten setzen, },{und die durch Kommata getrennt sind}}
    \tntab[4]{4}{}
    \listoftables
    \end{document}
    Im log kannst Du sehen, wie die Tabelle schrumpft.;-)

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  6. #21
    ctansearch
    Gast
    @rais

    Ja, der Aufwand mit den Boxen ist extrem hoch und bringt wenig Effekt.
    Ich denke, wir können das Gebastel so stehen lassen, es ergeben sich ohnehin schon eine Masse richtig guter Gestaltungsmöglichkeiten.
    Falls es tatsächlich einmal dazu kommt, daß die \deflintab-Definition zu groß wird, kann man diese ja wiederum aufspalten und "von Hand" eine neue Tabelle anfangen.

    Der letzte Test kompiliert mit 9999 Werten auf 98 Seiten ohne Problem.
    Was will man mehr..
    Nun als Paket zu finden unter
    http://ctan.org/pkg/nox
    Geändert von ctansearch (18-06-2013 um 21:44 Uhr)

  7. #22
    ctansearch
    Gast

    Update NOX und micropage

    Genau für eine solche Anwendung wie NOX http://ctan.org/pkg/nox hatte ich mal das Paket micropage geschrieben, um in Tabellen fortlaufende kleine Micropages unterzubringen. Unbefriedigend ist nun die \tntabledimen-Funktion, vielleicht sollte man die aufgeben. Auch gelingt es mir nicht, die \micropages(Seitenzahlen) vernünftig einzufügen. Hast Du eine Idee?

    Code:
    \documentclass[10pt,a4paper]{article}%
    \usepackage[utf8]{inputenc}%
    \usepackage[ngerman]{babel}%
    \usepackage[colspecstaysintable,c]{nox}
    \usepackage{amsmath,graphicx,tabularx,micropage}
    \author{ctansearch,rais}
    \title{Nox v.1.0}
    \begin{document}%
    \maketitle
    \abstract{Dieses Paket ist aus einer kleinen Onlinezusammenarbeit entstanden. Es
    ermöglicht, Daten, Texte und \TeX/\LaTeX - Befehle und Umgebungen in einem Array
    unterzubringen und später in frei definierbaren und fortlaufenden Tabellen
    abzurufen. Ursprünglich hieß der Versuch \texttt{tablenumbers} Der häufige
    Gebrauch des \textbackslash noexpand-Befehls hat diesem Paket den Namen \texttt{Nox}
    gegeben.}\par
    \section{Allgemeines}
    
    Werte können in beliebiger Anzahl in den Array 
     eingegeben werden.
    Dann legt man die Ausrichtung innerhalb der Tabelle fest
    \begin{verbatim}
    \renewcommand{\cellflush}{\raggedright}
    \renewcommand{\cellflush}{\raggedleft}
    \renewcommand{\cellflush}{\centering}
    \renewcommand{\cellflush}{} %ergibt Blocksatz
    \end{verbatim}
    Man definiert mit \begin{verbatim}\tntabledimen{x}{y}\end{verbatim} die
    Spaltenbreite x und Zeilenhöhe y. 
    Durch \begin{verbatim}\tntab[x]{y}{y Elemente in x Spalten}\end{verbatim} legt man fest, in wievielen Spalten
    wieviele Elemente des Array dargestellt werden sollen. Wenn die Anzahl der
    abgerufenen Elemente (y*x) kleiner ist, als die im Array verfügbaren Elemente, können
    diese durch weitere, anschließende Tabellen abgerufen werden. Wenn sie größer
    ist, erscheint ein Fehlermeldung.
    
    \section{Anwendung mit Zahlen}
    \renewcommand{\cellflush}{}
    \begin{verbatim}
    \deflintab{1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17}
    \renewcommand{\cellflush}{\raggedright}
    \tntabledimen{1}{1} %Zeilenhöhe 1\baselineskip Zellenbreite 1\basecolskip
    \tntab[4]{8}{2x4}
    \tntab[4]{8}{4x8}
    \tntab[4]{8}{4x8}
    \end{verbatim} ergibt
    \deflintab{1,2,3,4,5,6,7,8,9,10,11,12,13,14,16,17}
    \tntabledimen{1}{7}
    \tntab[4]{8}{2x4}
    Zwischen den Tabellen kann man ohne weiteres einen Text einbringen, die
    Tabelle wird einfach weitergeführt.
    \tntab[4]{8}{2x4}
    \subsection{Verschachtelungen}
    Mit Verschachtelungen kann man auch mehrere Tabellen nebeneinander
    setzen. Wieviele Elemente und Befehle solche Teiltabellen aufnehmen können muß
    noch getestet werden.
    \def\TabA{%Tabelle in einem Befehl zusammenfassen addbyctans 11.06.13
    \deflintab{
    \celllabel{A}
    {\nox\begin{tabular}{cccc}\nox\caption{}\nox\\
    1\amp 2\amp  \nox\\
    1\amp 2\amp 3 \nox\\ 
    1\amp 2\amp 3 $\nox\rightarrow$\nox\\
    \nox\end{tabular}},
    \celltitle{B}
    {\nox\begin{tabular}{cccc}\nox\caption{B}\nox\\
    1\amp 2\amp 3 \nox\\
    1\amp 2\amp 3 \nox\\ 
    1\amp 2\amp 3 $\nox\rightarrow$\nox\\
    \nox\end{tabular}},
    \celltitle{C}
    {\nox\begin{tabular}{cccc}\nox\caption{C}\nox\\
    1\amp 2\amp 3 \nox\\
    1\amp 2\amp 3 \nox\\ 
    1\amp 2\amp 3 $\nox\rightarrow$\nox\\
    \nox\end{tabular}},
    \celltitle{D}
    {\nox\begin{tabular}{cccc}\nox\caption{D}\nox\\
    1\amp 2\amp 3 \nox\\
    1\amp 2\amp 3 \nox\\ 
    1\amp 2\amp 3 $\nox\rightarrow$\nox\\
    \nox\end{tabular}},
    \celltitle{E}
    {\nox\begin{tabular}{cccc}\nox\caption{E}\nox\\
    1\amp 2\amp 3 \nox\\
    1\amp 2\amp 3 \nox\\ 
    1\amp 2\amp 3 $\nox\rightarrow$\nox\\
    \nox\end{tabular}},
    \celltitle{F}
    {\nox\begin{tabular}{cccc}\nox\caption{F}\nox\\
    1\amp 2\amp 3 \nox\\
    1\amp 2\amp 3 \nox\\
    1\amp 2\amp 3 $\nox\rightarrow$\nox\\
    \nox\end{tabular}}
    }
    \tntabledimen{9}{8}
    \tntab[3]{6}{Zwei mal drei}}
    \TabA%Zusammengefasste Tabelle abrufen.addbyctans 11.06.13
    
    Wenn man möchte, kann man die Konstruktionen jeweils als eigenen Befehl
    definieren und dort abrufen, wo man sie braucht. So ist zum Beispiel die
    Tabellenkette [\ref{A}] im Befehl \texttt{$\backslash$TabA} gespeichert.
    Man kann solche Tabellen in einer externen Datei speichern und bei Bedarf
    einbinden oder zum Beispiel Tabellenvorlagen erarbeiten, in die man nur noch
    die Daten einfügt.
    Für den Befehl \texttt{$\backslash$tntabledimen} ist zu erwähnen, daß er für alle
    folgenden Tabellen gilt, solange er nicht neu definiert wird. Man kann also
    alle Tabellen eines Dokumentes leicht auf ein Format bringen.
    \section{Anwendung mit Texten}
    Eine Anwendung mit Texten macht es möglich, Spalten mit fortlaufenden Texten
    zu füllen, die bei einem Zeilenwechsel immer mit der ersten Spalte neu beginnen.
    Automatische Spaltenwechsel sind nach wie vor nicht möglich, sie müssen im
    Array durch geschweifte Klammern(Gruppieren) und Kommata definiert werden.
    Die Zeilenhöhe wird dabei explizit festgelegt, die Zeilenhöhen passen sich
    \textbf{nicht} automatisch an. Es gibt derzeit keine Möglichkeit, die Anzahl
    der Zeichen mit der Spaltenbreite und Zeilenhöhe in Beziehung zu setzen um so
    einen automatischen Spaltenumbruch zu erzeugen. Übervolle Spalten führen
    deshalb zu einem Überlauf, der durch veränderte Gruppierung , breitere Spalten
    oder größere Zeilenhöhen ausgeglichen werden muß. Die Anpassung durch
    \texttt{$\backslash$tntabledimen} macht eine sehr genaue Dimensionierung der
    Tabellen möglich, worauf man nicht ohne weiteres verzichten
    sollte. 
    \begin{verbatim}
    \deflintab{{...},{...},{...},{...},{...}}
    \tntabledimen{12}{7}%Zeilenhöhe Spaltenbreite
    \tntab[4]{12}{Worte}
    \end{verbatim} ergibt
    \tntabledimen{5}{7.5}%Zeilenhöhe Spaltenbreite
    \renewcommand{\cellflush}{\raggedright}
    \deflintab{{Hier wird ein Text dargestellt, der in einer Spalte ausgegeben
        wird.},{In der zweiten Spalte wird er fortgeführt, so wie er},{in der
        dritten Spalte beendet wird.},{Der nächste Text wird in die folgende
        Spalte oder Zeile verschoben.},{Dies
      hängt von der Gestaltung der Tabelle(der Spaltenanzahl, Spaltenhöhe und der
      Gruppierung) ab.}}
    
    \tntab[4]{8}{Worte}
    \section{Anwendung mit Umgebungen und Befehlen}
    In dem Array \texttt{$\backslash$deflintab} können auch Befehle oder Umgebungen untergebracht werden, was
    eine große Zahl von Gestaltungsmöglichkeiten in Tabellenzellen erlaubt. Hier
    kommt der Befehl \texttt{$\backslash$noexpand} zum Tragen, der durch
    \texttt{$\backslash$nox} abgekürzt wird. Wenn man allen
    \texttt{$\backslash$} ein
    \texttt{$\backslash$nox} voranstellt, werden die Befehle nicht expandiert und
    kommen erst später zur Anwendung. Für viele Befehle und Umgebungen
    funktioniert dies, im Einzelnen muß man es ausprobieren. Manche Umgebungen muß
    man zusätzlich gruppieren \{...\}.
    \tntabledimen{5}{8}
    \deflintab{
    \celllabel{List}\nox\begin{list}{\nox\dots}{\nox\itemsep \nox\labelsep \nox\labelwidth \nox\leftmargin\nox\listparindent\nox\parsep\nox\parskip\nox\partopsep\nox\rightmargin \nox\topsep }
    \nox\item First item \nox\item Second item \nox\end{list},
    \celllabel{Equation } \nox\begin{equation}\nox\sqrt{15}=3.87\nox\end{equation},
    \celllabel{Itemize } \nox\begin{itemize}\nox\item Aufzählung \nox\item Aufzählung \nox\end{itemize},
    \celllabel{Math} Text ist immer dabei \nox\begin{math}x=f(y^2+2)
      \nox\end{math},
    \celllabel{MathA} Text ist immer dabei \nox\begin{math}x=f(y^2+2) \nox\end{math},
    \celllabel{frac}$\nox\frac{\nox\pi}{180^\nox\circ}=1$,
    }
    \tntab[3]{8}{Umgebungen und Befehle}
    \section{Cellnotes}
    Aus dem Paket \textsl{mbenotes.sty} habe ich den Code entliehen, der Anmerkungen in jeder
    Zelle möglich macht. Diese werden am Ende der jeweiligen Teiltabelle
    ausgegeben, sofern sie vorhanden sind. \texttt{$\backslash$cellnote{}} muß mit
    \texttt{$\backslash$noexpand} oder \
    texttt{$\backslash$nox}
    eingeleitet werden, wenn sie im Array \texttt{$\backslash$deflintab{...}}genutzt wird.
    \begin{verbatim}
    \deflintab{1,2\nox\cellnote{$\nox\sqrt{4}$},3,4,5}
    \tntabledimen{1}{1}
    \tntab[3]{5}{Cellnotes}
    \end{verbatim} ergibt
    \deflintab{1,2\nox\cellnote{$\nox\sqrt{4}$},3,4,5}
    \tntabledimen{6}{1}
    \tntab[3]{5}{Cellnotes}
    
    \section{Micropages}
    \tntabledimen{14}{10}
    \deflintab{\nox\begin{micropage}\nox\microsection{Section of micropage}Dies ist eine Micropage die in NOX eingebettet
        ist. Man muß bei der Textgestaltung darauf achten die micropage nicht zu überfüllen.\nox\end{micropage},\nox\begin{micropage}\nox\microsection{Section of
          micropage}  \nox\submicrosection{Submicrosection}\nox\end{micropage},\nox\begin{micropage}\nox\microsection{Microsection}\nox\subsubmicrosection{Subsubmicrosection}\nox\end{micropage},\nox\begin{micropage}\nox\microsection{Microsection}\nox\subsubmicrosection{Subsubmicrosection}\nox\end{micropage},\nox\begin{micropage}\nox\microsection{Microsection}\nox\subsubmicrosection{Subsubmicrosection}\nox\end{micropage}}
    
    \tntab[3]{9}{Micropages}
    \vskip2cm
    \section{Referenzen}
    Im laufenden Text kann man auf jeden Zellentitel(jede Zelle der Tabelle) referenzieren, da die Labels
    bereits beim Erstellen der Titel erzeugt
    werden\texttt{$\backslash$celllabel\{x\}} erzeugt einen Titel und ein Label, \texttt{$\backslash$celltitle\{x\}} erzeugt nur einen
    Titel, ohne ein Label zu erzeugen. Die üblichen \texttt{$\backslash$label\{x\}}
    funktionieren weiterhin.
    
    \section{Erweiterungen}
    Der Grund, für die Tabellen \texttt{longtable} zu wählen ist, daß man die
    \texttt{$\backslash$tabular}-Umgebung in diese einbringen kann. Umgekehrt wäre
    dies schwieriger. 
    Wünschenswert wäre noch eine \texttt{$\backslash$subtable}-Funktion für das
    Tabellenverzeichnis, um die Tabellen, die in der Longtable-Umgebung definiert
    werden, der Haupttabelle zu untergliedern.
    \listoftables
    \twocolumn
    \tableofcontents
    \end{document}
    unter Verwendung von micropage.sty

    Code:
    \newcounter{micropages}
    \newcounter{micropart}
    \newcounter{microchapter}
    \newcounter{microsection}
    \newcounter{submicrosection}
    \newcounter{subsubmicrosection}
    \newcounter{microparagraph}
    \newcounter{submicroparagraph}
    \renewcommand\themicropart{\@arabic\c@micropart}
    \renewcommand\themicrochapter{\@arabic\c@microchapter}
    \renewcommand\themicrosection{\@arabic\c@microsection}
    \renewcommand\thesubmicrosection{\themicrosection.\@arabic\c@submicrosection}
    \renewcommand\thesubsubmicrosection{\thesubmicrosection.\@arabic\c@subsubmicrosection}
    \renewcommand\themicroparagraph{\thesubsubmicrosection.\@arabic\c@microparagraph}
    \renewcommand\thesubmicroparagraph{\themicroparagraph.\@arabic\c@submicroparagraph}
    \newwrite\@microtoc
    \immediate\openout\@microtoc=\jobname.moc
    
    \newcommand\micropart[1]{
    \setcounter{microchapter}{0}
    \setcounter{microsection}{0}
    \setcounter{submicrosection}{0}
    \setcounter{subsubmicrosection}{0}
    \refstepcounter{micropart}
    \vskip0.5\baselineskip 
    \textbf{\Huge{#1 \themicropart}}
    \vskip0.5\baselineskip  
    \immediate\write\@microtoc{#1 \themicropart
      \hfill\thepage.\themicropages  \vskip\baselineskip } }
    \newcommand\microchapter[1]{
    \setcounter{microsection}{0}
    \setcounter{submicrosection}{0}
    \setcounter{subsubmicrosection}{0}
    \refstepcounter{microchapter}
    \vskip0.5\baselineskip \Large{\textbf{#1 \themicrochapter}}
    \vskip0.5\baselineskip
    
    \immediate\write\@microtoc{ #1 \themicrochapter \hfill \thepage.\themicropages \vskip0.5\baselineskip}\normalsize }
    \newcommand\microsection[1]{
    \setcounter{submicrosection}{0}
    \setcounter{subsubmicrosection}{0}
    \refstepcounter{microsection}
    \vskip0.5\baselineskip\Large{\textbf{\themicrosection. #1}}
    \vskip0.5\baselineskip
    \immediate\write\@microtoc{\themicrosection. #1 \hfill\thepage.\themicropages \vskip0.5\baselineskip }\normalsize }
    \newcommand\submicrosection[1]{
    \refstepcounter{submicrosection}
    
    \vskip0.5\baselineskip\large{\textbf{\thesubmicrosection. #1}}
    \vskip0.5\baselineskip
      \immediate\write\@microtoc{\thesubmicrosection. #1 \hfill \thepage.\themicropages \vskip0.5\baselineskip }\normalsize}
    \newcommand\subsubmicrosection[1]{
    \refstepcounter{subsubmicrosection}
    \vskip0.5\baselineskip\normalsize{\textbf{\thesubsubmicrosection. #1}}
    \vskip0.5\baselineskip
    \immediate\write\@microtoc{\thesubsubmicrosection. #1\hfill\thepage.\themicropages \vskip0.5\baselineskip }\normalsize}
    \newcommand\microparagraph[1]{
    \vskip\baselineskip\normalsize{\textbf{#1}}
    \vskip0.5\baselineskip \immediate\write\@microtoc{ #1 \hfill\thepage.\themicropages \vskip0.5\baselineskip}\normalsize}
    \newcommand\submicroparagraph[1]{
    \vskip0.5\baselineskip\normalsize{\textbf{#1}}
    \vskip0.5\baselineskip
    \immediate\write\@microtoc{#1 \hfill \thepage.\themicropages \vskip0.5\baselineskip}\normalsize}
    \newcommand{\micropagesize}{0.5\textwidth}
    \newenvironment{micropage}
    %BEGIN Bereich
    {%
    \renewcommand{\micropagesize}{\cellwidth}
    \let\Huge\huge
    \let\huge\Large
    \let\Large\large
    \let\large\normalsize
    \let\normalsize\small
    \let\small\scriptsize
    \let\scriptsize\tiny
    \hsize=\micropagesize
    \parindent=0pt
    \refstepcounter{micropages}
    }%
    {%END Bereich
    
    }%
    Geändert von ctansearch (23-06-2013 um 10:26 Uhr)

  8. #23
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Moin ctansearch,
    Zitat Zitat von ctansearch Beitrag anzeigen
    Genau für eine solche Anwendung wie NOX http://ctan.org/pkg/nox hatte ich mal das Paket micropage geschrieben, um in Tabellen fortlaufende kleine Micropages unterzubringen. Unbefriedigend ist nun die \tntabledimen-Funktion, vielleicht sollte man die aufgeben.
    evtl. hilft hier, das aktuelle Element in eine Box mit Spaltenbreite zu packen, dann könntest Du zumindest drauf reagieren, wenn ein Element hier zu hoch ist.
    Zitat Zitat von ctansearch Beitrag anzeigen
    Auch gelingt es mir nicht, die \micropages(Seitenzahlen) vernünftig einzufügen. Hast Du eine Idee?
    Mir ist nicht ganz klar, was Du mit `vernünftig einfügen' meinst.
    Was mir etwas seltsam vorkommt, sind die \thepage-Aufrufe innerhalb der \immediate\write-Anweisungen. Bekommst Du hier nicht das Problem, dass die in der .moc eingtragene Seitenzahl nicht zwingend synchron zu der Seite ist, auf der der dazugehörige \micro*-Abschnitt aufgerufen wird?
    Bei der Ausgabe kann Materal auch auf der nächsten Seite landen ...
    Eine mögliche Alternative wäre, zwischen \refstepcounter und \immediate\write ein \label zu setzen und dann im \immediate\write nicht \thepage, sondern \pageref zu verwenden (muss ggf. geschützt werden).
    Vllt wäre es auch überlegenswert, micropage an tocbasic anzupassen (die Doku zu tocbasic ist mit im scrguide).

    BTW: Du weißt, daß Du Dir mit
    Code:
    \newcommand\foo{
     irgendwas
    }
    vor `irgendwas' (hier auch danach) ein Leerzeichen einfängst?

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  9. #24
    ctansearch
    Gast
    @rais
    Was mir etwas seltsam vorkommt, sind die \thepage-Aufrufe innerhalb der \immediate\write-Anweisungen
    Danke für den Hinweis. Das war ein Relikt (Micropage x auf Seite y).
    Ein solcher Verweis ist überflüssig und überlädt die Sache. Auf Wunsch kann ja \pageref eingesetzt werden.
    Die Seitenzahlen der Micropages (\themicropages) am Ende der Umgebung abrufen genügt ja.
    Ich kann sie jetzt auch richtig ausrichten, ich hatte übersehen, daß die Ausrichtung der übergeordneten Ausrichtung der Tabellenzellen folgt und deshalb nochmals eine Ausrichtung erfolgen muss.

    Siehe auch http://biocoen.org
    Geändert von ctansearch (24-06-2013 um 22:49 Uhr)

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •