Quantcast
Channel: Antworten auf: Zeichenanzahl automatisch in Latex Dokument einfügen
Viewing all articles
Browse latest Browse all 2

Antwort von Ijon Tichy

$
0
0

Basierend auf den Hinweisen auf saputellos Kommentare könnte man in der Tat das eigentliche Dokument zweimal verarbeiten: Einmal ganz normal und einmal mit zusätzlichen Einstellungen, die dafür sorgen, dass nur die Zeichen in der Ausgabe landen, die auch wirklich gezählt werden sollten. Dieses Zähldokument lässt man dann ebenfalls erstellen, macht beispielsweise mit pdftotext eine Textdatei daraus und zählt mit einem Programm wie wc (ist bei Linux normalerweise dabei, gibt es aber auch für OSX und Windows) dann die Zeichen in der Textdatei.

Die Erzeugung des Zähldokuments kann sehr einfach aus dem Hauptdokument per filecontents-Umgebung erfolgen. Die Verwendung von Paket stdpage in dem Zähldokument ist nicht zwingend, kann aber bereits einige Dinge erleichter. Fehlende Dokumentvereinfachungen ergänzt man zusätzlich.

Die benötigten Aufrufe, um aus dem Zähldokument schließlich die Anzahl der Zeichen zu erhalten, kann man in den Dokumenterstellungsvorgang ähnlich dem Aufruf von makeindex oder biber etc. einfügen. Man kann aber auch mit dem Paket shellesc, das Bestandteil neuerer Version der LaTeX-Standard-Tools ist, die Aufrufe direkt aus dem Hauptdokument heraus durchführen. Dazu muss pdflatex (oder lualatex oder xelatex) allerdings mit Option --shell-escape aufgerufen werden.

Angenommen, wir haben ein Dokument test-hauptdatei.tex:

Öffne in Overleaf
\RequirePackage{filecontents}\begin{filecontents*}{normseiten.tex}\makeatletter\newcommand*{\GenerateInfoPage}{%    \usepackage[hyphen=false,just=false,parskip]{stdpage}%\let\tableofcontents\relax\let\listoffigures\relax\let\maketitle\relax\let\ps@plain\ps@empty
  \let\ps@headings\ps@empty
  \renewcommand*{\includegraphics}[2][]{}%}\makeatother\input{test-hauptdatei.tex}\end{filecontents*}\documentclass{article}\usepackage[T1]{fontenc}\usepackage{graphicx}\newcommand*{\BeispielMakro}{Das ist nur irgend ein Beispielmakro}\usepackage{mwe}\usepackage{shellesc}\providecommand*{\GenerateInfoPage}{%\AtEndDocument{%\typeout{Es erfolgt die Ermittlung der Zeichen.}%\ShellEscape{pdflatex normseiten.tex}% Normseiten erstellen.\ShellEscape{pdftotext normseiten.pdf normseiten.txt}% In Text wandeln\ShellEscape{wc -m normseiten.txt | cut -d' ' -f1 > test-anzahlseiten.txt}% Zeichen zählen\clearpage\IfFileExists{test-anzahlseiten.txt}{%
      Dieses Dokument hat ohne diese Seite \input{test-anzahlseiten.txt}Zeichen.
    }{%
      Um die Anzahl der Zeichen in diesem Dokument zu bestimmen, ist Option
      \texttt{--shell-escape} beim Aufruf von \texttt{pdflatex} erforderlich!
    }%}%}\pagestyle{headings}\GenerateInfoPage% Sollte die letzte Anweisung vor \begin{document} sein!\begin{document}\title{Titel}\author{Ijon Tichy}\maketitle\tableofcontents\listoffigures\blinddocument\begin{figure}\includegraphics{example-image}\caption{Testbild mit \BeispielMakro}\end{figure}\end{document}

dann erhält man auf diese Weise als letzte Seite den Hinweis:

Dieses Dokument hat ohne diese Seite 4376 Zeichen.

Wie zu sehen ist, ist das Einbinden des Zählergebnisses selbst dabei das kleinere Problem. Entscheidender ist in der Tat, dass man wirklich genau das zählt, was man wirklich zählen will. Das sollte man anhand der Datei normseiten.pdf unbedingt überprüfen!

Um die Infoseite nicht mit zu zählen wurde ein einfacher Trick verwendet. Die Anweisung, die diese Infoseite erzeugt, wird nur dann definiert, wenn sie nicht bereits definiert ist. Im Zähldokument wiederum wird diese Anweisung bereits vorab, also vor dem Einlesen des Hauptdokument, definiert und enthält dann die ganzen Änderungen, die nur für das Zähldokument gelten. Wollte man die Infoseite mitzählen, müsste man hier stattdessen unterschiedliche Befehle verwenden und den für das Zähldokument im Hauptdokument nur ausführen, wenn er definiert ist.


Viewing all articles
Browse latest Browse all 2

Latest Images





Latest Images