PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Reintext Seitenanzahl berechnen



ice8878
12-12-2006, 13:45
Servus,

folgendes Problem. Ich möchte die Anzahl der Seiten berechnen die den Reintext in meiner Arbeit ausmachen. Dazu habe ich mir ein label auf die letzte und die erste Reintextseite gesetzt. Nun will ich eigentlich ganz einfach \pageref{lastpage} minus \pageref{firstpage} rechnen um die seitenzahl rauszubekommen. Offensichtlich ist das garnich so einfach. Ich hab mir erstmal so behelfen wollen mit dieser Struktur:



\newcount\added
\added=\pageref{lastpage}
\newcount\myval \myval=-\pageref{firstpage}
\advance\added by \myval
added = \the\added


Die Ausgabe von \the\added soll die Zahl liefern. Leider funktionert das ganze nicht wenn ich die pagerefs als vermeintliche Zahlenwerte einsetze. Wenn ich richtige numerische Zahlen verwende gehts.

Nun die Frage, wie kann ich das ganze mit den pagerefs realisieren?

Bin für jeden Vorschlag dankbar.

localghost
12-12-2006, 21:57
Kann man das nicht mit dem Paket calc (ftp://dante.ctan.org/tex-archive/help/Catalogue/entries/calc.html) erledigen? Alles was Du brauchst, steht bestimmt in der Dokumentation.

ice8878
13-12-2006, 09:06
Mit calc würde ich es so machen:



\newcounter{reintext}
\setcounter{reintext}{\pageref{lastpage}}
\setcounter{reintext}{(\value{reintext})-\value{\pageref{firstpage}}}

%Ausgabe
\thereintext


Nur leider funktioniert das nicht richtig weil LaTex die pagerefs nicht numerisch auswertet in dieser Rechnung und somit keine Subktraktion durchführen kann. Das ist das generelle Problem, was auch bei anderen Methoden zum tragen kommt. Ähnliches Spiel hatte ich mit dem fp Package.

rais
13-12-2006, 10:39
Mit calc würde ich es so machen:



\newcounter{reintext}
\setcounter{reintext}{\pageref{lastpage}}
\setcounter{reintext}{(\value{reintext})-\value{\pageref{firstpage}}}

%Ausgabe
\thereintext


Nur leider funktioniert das nicht richtig weil LaTex die pagerefs nicht numerisch auswertet in dieser Rechnung und somit keine Subktraktion durchführen kann. Das ist das generelle Problem, was auch bei anderen Methoden zum tragen kommt. Ähnliches Spiel hatte ich mit dem fp Package.

kannst Du Dir nicht einfach zwei Zähler dafür definieren? Also auf den entsprechenden Seiten \setcounter{firstpage}{\value{page}} bzw. \setcounter{lastpage}{\value{page}} ? Dann gibt es zmindest keine Konvertierprobleme...
Allerdings solltest Du so die Differenz wohl erst am Ende (sprich: wenn lastpage bekannt ist) ausrechnen und in eine Datei schreiben, wenn Du den Wert weiter vorne im Text auslesen willst.
MfG,

ice8878
14-12-2006, 09:36
k, also das rechnen haut jetzt hin - allerdings nur am Ende des Textes. Habs jetzt so gemacht:



\newcounter{firstpage}
\setcounter{firstpage}{\value{page}}

[...]

\newcounter{lastpage}
\setcounter{lastpage}{\value{page}}

\newcounter{reintext}
\setcounter{reintext}{(\thelastpage)-(\thefirstpage)}
\thereintext


Wie kann ich in eine Datei ausgeben und dann vorne wieder einlesen?

rais
15-12-2006, 09:17
Wie kann ich in eine Datei ausgeben und dann vorne wieder einlesen?
Mit


\immediate\openout0=\jobname.rtx\immediate\write0{ \arabic{reintext}}\closeout0
am Dokumentende könntest Du den Zählerinhalt in eine Datei foo.rtx schreiben (wenn Dein Dokument denn foo.tex heißt) und mit


\renewcommand{\thereintext}{\input{\jobname.rtx}}
könntest Du \thereintext so umbiegen, daß der Dateiinhalt auch ausgelesen wird, d.h. dann solltest Du auch irgendwo im Text auf \thereintext zugreifen können.
Im ersten LaTeX-Lauf sollte es dann noch eine Meldung "No file: foo.rtx" geben, aber damit ist zu rechnen, wenn man aus einer Datei etwas auslesen will, die man hinterher erst anlegt.;)
Schlimmstenfalls ist "0" bereits offen, dann kannst Du einfach ne andere ausprobieren (\openout, \write und \closeout) -- afaik gibt es 16 davon.
Hmm, besser wäre vllt \newwrite\bla \openout\bla=\jobname.rtx... etc.
MfG,

Fritz
08-01-2007, 23:23
Da ich gerade ein ähnliches Problem hatte bei dem die Treffsicherheit von \page leider nicht ausreicht, hier nochmal ein Vorschlag für eine "saubere" Lösung. Angeblich stammt sie von Heiko Oberdiek, man kann also davon ausgehen dass man das tatsächlich so macht. Das wiederum macht mir LaTeX in dieser Beziehung (was saubere Programmierfähigkeit angeht) aber auch nicht sympatischer :(

http://www.mrunix.de/forums/showthread.php?p=224276&posted=1#post224276

ice8878
03-02-2007, 21:20
Soo, kurz zu meiner Lösung die endlich den gewünschten Erfolg bescherte:

Diesen Code habe ich auf der ersten Reintext Seite gesetzt:



\newcounter{firstpage}
\setcounter{firstpage}{\value{page}}


Dieser Code steht auf der letzten Seite des Reintextes:



%Berechnung der letzten Reintext Seite, die folgenden Kommandos sollten am Ende der Arbeit stehen
\newcounter{lastpage}
\setcounter{lastpage}{\value{page}}
%
\newcounter{reintext}
\setcounter{reintext}{(\thelastpage)-(\thefirstpage)}

%Wert der berechneten Reintext Seiten in die Datei Jobname.tc schreiben (wird in der Einführung wieder eingelesen)
\newwrite\reintextfile
\immediate\openout\reintextfile=\jobname.tc\relax
\immediate\write\reintextfile{\arabic{reintext}}
\immediate\closeout\reintextfile


Da ich die Seitenzahl am Anfang der Arbeit brauchte, im Autorenreferat sozusagen, habe ich folgenden Code an der jener Stelle eingefügt:



\makeatletter\@input{\jobname.tc}\makeatother


Alles zusammen lieferte mir exakt die Zahl des Reintextes exkl. aller anderen "Rahmenseiten"

Danke an alle, die zur Lösung beigetragen haben.

charder
04-02-2007, 07:28
Hallo,


habe eine ähnliche Frage.

Ist es möglich, dass Latex die Anzahl des wirklich reinen Textes, also ohne Abbildungen und Tabellen ausgibt??

daswaldhorn
04-02-2007, 11:49
Hallo,

möglicherweise nützt dir das Paket endfloat was. Damit kannst du deine Bilder und Tabellen ans Ende schieben, und dann wie oben die reinen Textseiten berechnen.

Grüße, Carsten

charder
04-02-2007, 13:57
guter Hinweis, danke. Allerdings hat endfloat ein Problem mit Umlauten und scharfen s in der Caption. Gibt es da noch ne Lösung