PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wert von \pageref in zählerregister speichern



Fritz
02-01-2007, 13:49
Hallo,

ich muss mit Seitenzahlen rechnen. Die einzige Möglichkeikeit die aktuelle Seitennummer zu erhalten besteht ja laut FAQ in unschönen \pageref tricks. Jetzt brauche ich aber eben die aktuelle Seitennummer in einem Zählregister, aber folgendes geht leider nicht:


\newcounter{seitennummer}
\setcounter{seitennummer}{\pageref{label}}

Ist sowas möglich?

Fritz
04-01-2007, 12:17
Ok, ich habe inzwischen was dazu gefunden:



\providecommand*{\ifrefundefined}[1]{%
\expandafter\ifx\csname r@#1\endcsname\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\providecommand*{\@extract@ref}[2]{%
\expandafter\expandafter\expandafter#1\csname
r@#2\endcsname{}{}\@nil
}

\providecommand*{\@extractref}{%
\@extract@ref\@car
}

\providecommand*{\@extractpageref}{%
\@extract@ref\@secondcar
}

\long\def\@secondcar#1#2#3\@nil{#2}

\providecommand*{\setcounterfromref}[2]{%
\ifrefundefined{#2}{%
\protect\G@refundefinedtrue
\@latex@warning{Reference `#2' on page \thepage \space
undefined}%
\setcounter{#1}{0}%
}{%
\setcounter{#1}{\@extractref{#2}}%
}%
}
\providecommand*{\setcounterfrompageref}[2]{%
\ifrefundefined{#2}{%
\protect\G@refundefinedtrue
\@latex@warning{Reference `#2' on page \thepage \space
undefined}%
\setcounter{#1}{0}%
}{%
\setcounter{#1}{\@extractpageref{#2}}%
}%
}


Puh! Irgendwie kann man schon auf die Idee kommen, daß am Design einer Programmiersprache was nicht stimmt, wenn man so einen Dreck sieht!

ice8878
08-01-2007, 10:27
Hallo Fritz, wie wendest du den von dir gefunden Code im TeX an?

Könnte das eventuell auch bei meinem kleinen Problemchen helfen, siehe: http://www.mrunix.de/forums/showthread.php?t=48102

Fritz
08-01-2007, 23:11
Hallo Fritz, wie wendest du den von dir gefunden Code im TeX an?

Könnte das eventuell auch bei meinem kleinen Problemchen helfen, siehe: http://www.mrunix.de/forums/showthread.php?t=48102

Hallo ice88usw.,

da muss noch ein:



\catcode=`\@=11
%\newcommand bla bla
\catcode`\@=12


drüber bzw. drunter. Zwischen den \catcode dingern gehört dann der Klammeraffe auch zu den erlaubten Symbolen für Macro- bzw. Registernamen. Das ist wohl Konvention um sowas wie Namepsaces zu emulieren, damit es keine Kollisionen mit Symbolen aus anderen Paketen oder sowas gibt. Solche Hacks erinnern mich irgendwie an Perl ... :)

Fritz

ice8878
15-01-2007, 15:35
Hmm, kann mir das immer noch nich so ganz vorstellen. Ich versuchs nochmal verständlicher auszudrücken.

Wo muß dieser Code eingefügt werden?



\providecommand*{\ifrefundefined}[1]{%
\expandafter\ifx\csname r@#1\endcsname\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
}
\providecommand*{\@extract@ref}[2]{%
\expandafter\expandafter\expandafter#1\csname
r@#2\endcsname{}{}\@nil
}

\providecommand*{\@extractref}{%
\@extract@ref\@car
}

\providecommand*{\@extractpageref}{%
\@extract@ref\@secondcar
}

\long\def\@secondcar#1#2#3\@nil{#2}

\providecommand*{\setcounterfromref}[2]{%
\ifrefundefined{#2}{%
\protect\G@refundefinedtrue
\@latex@warning{Reference `#2' on page \thepage \space
undefined}%
\setcounter{#1}{0}%
}{%
\setcounter{#1}{\@extractref{#2}}%
}%
}
\providecommand*{\setcounterfrompageref}[2]{%
\ifrefundefined{#2}{%
\protect\G@refundefinedtrue
\@latex@warning{Reference `#2' on page \thepage \space
undefined}%
\setcounter{#1}{0}%
}{%
\setcounter{#1}{\@extractpageref{#2}}%
}%
}


Was genau hat es damit auf sich?



\catcode=`\@=11
%\newcommand bla bla
\catcode`\@=12


Im Prinzip geht es mir darum eine Lösung zu haben die es mir möglich macht am Anfang meiner Arbeit, quasi im Autorenreferat die Seitenzahl (automatisiert) des Reintextes (ohne Titelseite und sämtlicher Verzeichnisse am Ende) ausgeben zu können.

rais
15-01-2007, 17:24
Hmm, kann mir das immer noch nich so ganz vorstellen. Ich versuchs nochmal verständlicher auszudrücken.

Wo muß dieser Code eingefügt werden?

in Deiner Preambel


Was genau hat es damit auf sich?



\catcode=`\@=11
%\newcommand bla bla
\catcode`\@=12


da die neuen Befehle ein '@' beinhalten, sollte zuvor dieses '@' zu einem Buchstaben deklariert werden, genau das macht dieses "\catcode=`\@=11" -> dafuer kannst Du auch den etwas symbolischeren \makeatletter nehmen... also


\makeatletter %entspricht \catcode=`\@=11\relax
%der Code, von dem Du nicht wusstest, wo er hingehoert
\makeatother %entspricht \catcode=`\@=12\relax

aber mit TeX hink' ich noch etwas hinterher;-)
MfG,