Me gustaría crear una tabla dinámica con \N
columnas al principio de la página, en la que \N
está el número de secciones de todo el documento, por lo que \N
se establece el valor dedespuésla mesa. Cuando configuro el valor \N
antes de la tabla (en mi ejemplo, moviendo la línea 26 \N=\value{section}
después de la línea 10 \section{section 1}
), todo está bien, pero cuando configuro el valor \N
después de la tabla (como está aquí en mi ejemplo), esto genera un error. .
Aquí está mi código, con el valor \N
establecido después de la tabla. Supongo que no es tan difícil, pero no pude encontrar una solución. ¿Alguien tiene alguna idea?
\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}
Respuesta1
Por lo general, problemas como este se pueden resolver guardando la tabla enun archivo externoal final de su documento. Todo lo que necesita hacer es acceder al \input
archivo externo en la parte anterior del documento. Sin embargo, esto requiere compilar el documento dos veces para que la tabla se actualice correctamente. Aquí hay un ejemplo:
\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}
Estoy más familiarizado con LaTeX3. Estoy seguro de que también puedes utilizar el código LaTeX2e para lograr el mismo objetivo.
Actualización: almacenar el número de secciones en una variable
Si lo único que quieres es almacenar el número de secciones en una variable, aquí tienes un ejemplo más sencillo. Escribe la línea \global\def\numsection{5}
en el aux
archivo, al que se puede acceder en la siguiente ejecución.
\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}