\advance

Aus goLaTeX

\advance ist ein TeX-Primitiv, um zu einem numerischen TeX-Register einen Wert zu addieren.

Verwendung

Syntax

\advanceRegister by Wert
\advanceRegister Wert

Parameter

Register
ist wahlweise ein Längen-Register (\dimen), ein Abstands-Register (\skip), ein Zähler-Register (\count) oder ein Primitiv wie \baselineskip, das einem Längen-, Abstands- oder Zähler-Register gleich kommt.
Wert
eine mit dem Register kompatible Wertangabe. Das kann ebenfalls ein TeX-Register sein aber auch eine direkte Wertangabe, beispielsweise 17pt, falls Register ein Längen- oder Abstandsregister ist.

Beschreibung

Der aktuelle Wert von Register wird um den Wert erhöht und erneut in Register gespeichert. LaTeX-Anwender sollten statt des TeX-Primitivs immer eine der LaTeX-Anweisungen \addtolength oder \addtocounter verwenden, wobei bei \addtocounter keine TeX-Zählerregister, sondern LaTeX-Zähler anzugeben sind! Im Gegensatz zum TeX-Primitiv besteht bei den LaTeX-Anweisungen nicht die Gefahr, dass nachfolgender Text versehentlich als Teil des zu addierenden Werts interpretiert wird. Außerdem gibt es Pakete, wie calc, die zwar LaTeX-Anweisungen beispielsweise um die Verwendbarkeit von mathematischen Ausdrücken als Wert erweitern, aber nicht das TeX-Primitiv.

Außer, dass bei \advance im Gegensatz zu \addtocounter keine LaTeX-Zähler, sondern TeX-Zähler-Register anzugeben sind, gibt es einen weiteren Unterschied. \advance arbeitet (wie \addtolength) immer lokal zur aktuellen Gruppe, während die Wertänderung durch \addtocounter immer global ist.

Beispiele

% Achtung, dieses Beispiel ist sinnfrei und sollte nicht verwendet werden!
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\begin{document}
\blindtext[10]
Während der Eingabe dieses Textes, befinden wir uns noch auf Seite \thepage{} und in 5 Seiten wären wir auf Seite
\makeatletter\@tempcnta=\value{page}\advance\@tempcnta by 5\relax\the\@tempcnta\makeatother. Ausgegeben wird dieser Text allerdings auf Seite\label{thispage}~\pageref{thispage}.
\end{document}

Das Beispiel veranschaulicht weniger eine sinnvolle Verwendung von \advance als vielmehr die Asynchronizität der Ausgabe von TeX. Zum Zeitpunkt der Verwendung von \thepage oder \value{page} ist der mit \blindtex begonnene Absatz noch nicht umbrochen. Es steht also noch gar nicht fest, auf welcher Seite die Ausgabe erfolgt. Die korrekte Seitenzahl der Ausgabe des Textes ist daher nicht durch Verwendung von \thepage bzw. [[\value{page}]] zu erhalten, sondern nur über den Umweg des Setzens einen Labels mit \label und einen Seitenverweis auf dieses Label mit \pageref.

Verwandte Befehle

\addtocounter, \addtolength, \multiply, \divide