Valuta l'espressione / macro alla fine
Supponi di avere un documento in cui vuoi menzionare quante sezioni ci sono all'inizio. Ad esempio, qualcosa del genere:
\documentclass{article}
\begin{document}
Abstract\\There are ... sections in this document.
\section{Section 1}
\section{Section 2}
\section{Section 3}
\end{document}
Qui ... sarebbe una macro (o qualcos'altro) che dice che ci sono 3 sezioni.
Io, purtroppo, non sono riuscito a trovare un modo per far valutare quella macro alla fine (dove riporta 3).
In questo esempio, voglio sapere il numero di sezioni alla fine. Potrebbe esserci una soluzione che utilizza i contatori (in qualche modo), ma sto davvero cercando una soluzione in cui posso avere una certa influenza sull'ordine di valutazione delle macro.
Risposte
Puoi usare \AtEndDocument(e \AtBeginDocumentper impostare la macro nella prima esecuzione):
\documentclass{article}
\makeatletter
\AtEndDocument{
\write\@auxout{\string\gdef\string\previousrunsections{\thesection}}%
}
\AtBeginDocument{%
\ifcsname previousrunsections\endcsname
\else
\gdef\previousrunsections{??}%
\fi
}
\makeatother
\begin{document}
Abstract
\noindent There are \previousrunsections{} sections in this document.
\section{Section 1}
\section{Section 2}
\section{Section 3}
\end{document}
Dopo almeno due corse, ottieni:
Se hai bisogno di più controllo, il pacchetto etoolboxti offre molti hook.
PD: non utilizzare \\per terminare righe o paragrafi nel testo normale !
Puoi mettere il numero totale dove vuoi usando totcount.
\documentclass{article}
\usepackage{totcount}
\regtotcounter{section}
\begin{document}
\title{Title}
\author{Ömer}
\maketitle
\begin{abstract}
This is the abstract.
There are \total{section} sections in this document.
\end{abstract}
\section{Section 1}
\section{Section 2}
\section{Section 3}
\end{document}
Questo utilizza un xyzfile aux per salvare le informazioni.
\documentclass{article}
\newcommand\addxyzline[1]{\addtocontents {xyz}{#1}}
\makeatletter
\newcommand\writexyz{\@starttoc{xyz}}
\makeatother
\begin{document}
%\tableofcontents% CAN UNCOMMMENT TO SEE THAT toc WORKS FINE
\noindent Abstract\\There are \writexyz sections in this document.
\section{Introduction}
\section{Next}
\section{Third}
\addxyzline{\thesection}
\end{document}
Al momento della compilazione, il .xyzfile contiene, in questo caso, il numero 3e il .auxfile contiene
\relax
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {2}Next}{1}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {3}Third}{1}\protected@file@percent }
\@writefile{xyz}{3}
L'output è quindi:
Nota: la versione fornita funziona indipendentemente dal nome del file di input. Se preferisci non lavorare con l'approccio toc, potresti averlo cablato al nome del tuo documento, invece di definire
\newcommand\writexyz{\input junk.xyz }
dove in questo caso il documento deve essere junk.tex.