Dynamische Tabelle: Festlegen der Spaltennummer nach der Tabelle

Dynamische Tabelle: Festlegen der Spaltennummer nach der Tabelle

Ich möchte eine dynamische Tabelle mit \NSpalten am Anfang der Seite erstellen, in denen \Ndie Anzahl der Abschnitte im gesamten Dokument steht, daher \Nwird der Wert von gesetztnachdie Tabelle. Wenn ich den Wert \Nvor der Tabelle setze (in meinem Beispiel, indem ich Zeile 26 \N=\value{section}nach Zeile 10 verschiebe \section{section 1}), ist alles in Ordnung, aber wenn ich den Wert \Nnach der Tabelle setze (wie hier in meinem Beispiel), erzeugt das einen Fehler.

Hier ist mein Code mit dem Wert von \Nset nach der Tabelle. Ich nehme an, es ist nicht so schwierig, aber ich konnte keine Lösung finden. Hat jemand eine Idee?

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{graphicx}
\newtoks\cols
\newcounter{i}
\newcount\N
\begin{document}
    \section{section 1}
\cols={}
\setcounter{i}{1}
\loop
\cols=\expandafter{\the\expandafter\cols\the\value{i}}
\ifnum\value{i}<\N
\cols=\expandafter{\the\cols &}
\stepcounter{i}
\repeat
\begin{tabular}{|*{\N}{c|}}
    \the\cols
\end{tabular}
\section{section 2}
\section{section 3}
\section{section 4}
\section{section 5}
\N=\value{section}
\end{document}

Antwort1

Normalerweise können solche Probleme behoben werden, indem Sie Ihre Tabelle speichern untereine externe Dateiam Ende Ihres Dokuments. Sie müssen lediglich \inputdie externe Datei im früheren Teil des Dokuments verwenden. Dies erfordert jedoch, dass das Dokument zweimal kompiliert wird, damit die Tabelle korrekt aktualisiert wird. Hier ist ein Beispiel:

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{graphicx}
\usepackage{expl3}

\begin{document}
\section{section 1}
% load the table, if it exists
\InputIfFileExists{\jobname.table}{}{}
\section{section 2}
\section{section 3}
\section{section 4}
\section{section 5}

\ExplSyntaxOn
% open external file for writing
\iow_open:Nn \g_tmpa_iow {\jobname.table}
% get number of sections
\int_set:Nn \l_tmpa_int {\value{section}}
% write begin environment 
\iow_now:Nx \g_tmpa_iow {\c_backslash_str begin{tabular}
    {|*{\int_use:N \l_tmpa_int}{c|}}}
% write columns into a sequence
\seq_clear:N \l_tmpa_seq
% loop over integers and fill the sequence
\int_step_inline:nn {\l_tmpa_int} {
    \seq_put_right:Nn \l_tmpa_seq {#1}
}
% write table content
\iow_now:Nx \g_tmpa_iow {
    \seq_use:Nn \l_tmpa_seq {~&~} % join the sequence with " & "
}
% write end environment
\iow_now:Nx \g_tmpa_iow {\c_backslash_str end{tabular}}
\iow_close:N \g_tmpa_iow
\ExplSyntaxOff
\end{document}

Ich bin mit LaTeX3 besser vertraut. Ich bin sicher, dass Sie mit LaTeX2e-Code dasselbe Ziel erreichen können.

Update: Anzahl der Abschnitte in einer Variablen speichern

Wenn Sie lediglich die Anzahl der Abschnitte in einer Variablen speichern möchten, finden Sie hier ein einfacheres Beispiel. Es schreibt die Zeile \global\def\numsection{5}in die auxDatei, auf die beim nächsten Durchlauf zugegriffen werden kann.

\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{graphicx}


\begin{document}
Number of sections: \numsection

\section{section 1}
\section{section 2}
\section{section 3}
\section{section 4}
\section{section 5}

\makeatletter
\immediate\write\@auxout{\string\global\string\def\string\numsection{\the\value{section}}}
\makeatother

\end{document}

verwandte Informationen