Markierungen zählen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Markierungen zählen

von Benji » Di 19. Mai 2015, 14:45

Vielen Dank. Das mit dem totalcount habe ich jetzt nicht hinbekommen.

Mit "eleganter" meinte ich so was wie "gehe erst alle \markierungen durch und dann setzte \zaehle". Also, dass man nicht den Umweg über das File machen muss.

Ich paste dann zur Vollständigkeit mal meinen Code für das Schreiben in die Datei, falls jemand mal was Ähnliches sucht.
\newcommand\openCountFile{%
    \newwrite\countout%
    \immediate\openout\countout=counts.dat%
}

\def\chopline#1;#2 \\{%
    \@ifundefined{c@load:#1}{%
        \newcounter{load:#1}%
    }{}%
    \setcounter{load:#1}{#2}%
}

\newcommand\closeCountFile{\immediate\closeout\countout}

\newif\ifmore 
\moretrue
\newcommand\loadCounterValues{%
    \IfFileExists{counts.dat}{%
        \newread\quelle%
        \openin\quelle=counts.dat%
        \loop%
        \read\quelle to \zeile%
        \ifeof\quelle%
        \global\morefalse%
        \else%
        \expandafter\chopline\zeile\\%
        \fi%
        \ifmore\repeat%
        \closein\quelle%
    }%
}

\newcommand\markierung[1]{%
    \@ifundefined{c@mark:#1}{%
        \newcounter{mark:#1}%
    }{}%
    \stepcounter{mark:#1}%
    \immediate\write\countout{mark:#1;\arabic{mark:#1}}%
}

\newcommand\zaehle[1]{%
    \@ifundefined{c@load:mark:#1}{%
        \@latex@warning{%
            \G@refundefinedtrue%
            Markierung '#1' on page \thepage \space undefined}%
        (??)%
    }{%
        (\arabic{load:mark:#1})%
    }%
}

\AtBeginDocument{
    \loadCounterValues
    
    \openCountFile
}

\AtEndDocument{
    \closeCountFile
}
Sicher nicht die eleganteste und hübscheste Umsetztung, aber sie funktioniert sehr zuverlässig (bis jetzt).

von u_fischer » Di 19. Mai 2015, 11:10

Die einzige Lösung, die mir jetzt einfällt, die Zahl am Ende in ein File zu schreiben, dann nochmal bauen lassen und die Zahl auslesen. Aber es müsste doch eine "elegantere" Möglichkeit geben?
Inwiefern eleganter? Wenn du am Anfang den Wert vom Ende wissen willst, dann geht es nicht anders. Du musst zweimal kompilieren.

Im caption-Paket gibt es ein totalcount.sty, den du nutzen kannst.

Markierungen zählen

von Benji » Di 19. Mai 2015, 04:23

Hallo

Ich setzte in einem Dokument Markierungen und zähle diese (es geht nicht darum, Text zu parsen oder Wörter zu zählen). Hier ein Minimalbeispiel:
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}

\makeatletter
\newcommand\markierung[1]{% Kommando um Markierung zu setzten
    \@ifundefined{c@mark_#1}{%  Schauen, ob der jeweilge Counter schon existiert
        \newcounter{mark_#1}% Wenn nicht, einen Counter anlegen
    }{}%
    \stepcounter{mark_#1}% Hochzaehlen
}

\newcommand\zaehle[1]{%
    \@ifundefined{c@mark_#1}{% Wenn der Counter existiert
    }{%
    \arabic{mark_#1}% Wert ausgeben
    }%
}
\makeatother


\begin{document}

Blau\markierung{blau}, Gruen\markierung{gruen}, Hellblau\markierung{blau}, Gruen\markierung{gruen},

Im Text kam \zaehle{blau} mal Blau vor und \zaehle{gruen} mal Gruen vor. 
% Ausgabe: Im Text kam 2 mal Blau vor und 2 mal Gruen vor.
% Bereits hier sollte das Endergebnis stehen, das heißt 3 mal Blau

Blau\markierung{blau}

Im Text kam \zaehle{blau} mal Blau vor und \zaehle{gruen} mal Gruen vor.
% Ausgabe: Im Text kam 3 mal Blau vor und 2 mal Gruen vor.
\end{document}
--> Grundsätzlich funktioniert es, jedoch, gibt er nur die Anzahl an Markierungen bis zu der Stelle aus, wo ich \zaehle anwende.

Die einzige Lösung, die mir jetzt einfällt, die Zahl am Ende in ein File zu schreiben, dann nochmal bauen lassen und die Zahl auslesen. Aber es müsste doch eine "elegantere" Möglichkeit geben?

Vielen lieben Dank... Ich zerbreche mir da schon ewig den Kopf, weiß aber auch nicht, wie man nach so was googlen soll. :-(

Benji[/code]

Nach oben