![Dynamische Tabelle: Festlegen der Spaltennummer nach der Tabelle](https://rvso.com/image/420037/Dynamische%20Tabelle%3A%20Festlegen%20der%20Spaltennummer%20nach%20der%20Tabelle.png)
Ich möchte eine dynamische Tabelle mit \N
Spalten am Anfang der Seite erstellen, in denen \N
die Anzahl der Abschnitte im gesamten Dokument steht, daher \N
wird der Wert von gesetztnachdie Tabelle. Wenn ich den Wert \N
vor 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 \N
nach der Tabelle setze (wie hier in meinem Beispiel), erzeugt das einen Fehler.
Hier ist mein Code mit dem Wert von \N
set 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 \input
die 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 aux
Datei, 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}