
Angenommen, Sie haben ein Dokument, in dem Sie am Anfang angeben möchten, wie viele Abschnitte es hat. Zum Beispiel so etwas:
\documentclass{article}
\begin{document}
Abstract\\There are ... sections in this document.
\section{Section 1}
\section{Section 2}
\section{Section 3}
\end{document}
Hier … wäre ein Makro (oder etwas anderes), das besagt, dass es 3 Abschnitte gibt.
Ich konnte leider keine Möglichkeit finden, dieses Makro am Ende auswerten zu lassen (wo es 3 meldet).
In diesem Beispiel möchte ich am Ende die Anzahl der Abschnitte wissen. Es könnte (in gewisser Weise) eine Lösung mit Zählern geben, aber ich suche wirklich nach einer Lösung, bei der ich die Reihenfolge der Auswertung der Makros beeinflussen kann.
Antwort1
Sie können Folgendes verwenden \AtEndDocument
(und \AtBeginDocument
das Makro beim ersten Durchlauf festlegen):
\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}
Nach mindestens zwei Durchläufen erhalten Sie:
Wenn Sie mehr Kontrolle benötigen, etoolbox
bietet Ihnen das Paket zahlreiche Haken.
PD: nicht \\
zum Beenden von Zeilen oder Absätzen im normalen Text verwenden!
Antwort2
Sie können die Gesamtzahl mithilfe von an einer beliebigen Stelle eingeben 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}
Antwort3
Dabei wird eine xyz
AUX-Datei zum Speichern der Informationen verwendet.
\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}
Nach der Kompilierung .xyz
enthält die Datei in diesem Fall die Nummer 3
und die .aux
Datei enthält
\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}
Die Ausgabe ist daher:
Hinweis: Die angegebene Version funktioniert unabhängig vom Namen Ihrer Eingabedatei. Wenn Sie nicht mit dem toc-Ansatz arbeiten möchten, können Sie ihn fest mit Ihrem Dokumentnamen verknüpfen, anstatt
\newcommand\writexyz{\input junk.xyz }
In diesem Fall muss das Dokument junk.tex sein.