Korrigieren Sie die Wortzahl eines LaTeX-Dokuments

72

Ich suche derzeit nach einer Anwendung oder einem Skript, das die korrekte Wortzählung für ein LaTeX-Dokument ausführt.

Bis jetzt habe ich nur Skripte auf , daß nur die Arbeit an einer einzigen Datei , aber was ich will , ist ein Skript , das bedenkenlos ignorieren LaTeX Schlüsselwörter und kann auch Dateien Traverse verbunden ... dh folgen \includeund \inputLinks , um eine korrekte Wortanzahl für die zur Herstellung von ganzes Dokument.

Mit vim verwende ich derzeit ggVGg CTRL+Gaber offensichtlich, dass die Anzahl für die aktuelle Datei angezeigt wird und LaTeX-Schlüsselwörter nicht ignoriert werden.

Kennt jemand ein Skript (oder eine Anwendung), das diesen Job ausführen kann?

Andreas Grech
quelle
4
Wenn Sie versuchen, ein Tool zu finden, das die Wörter in Ihrem veröffentlichten PDF zählt, können die meisten LaTeX-Wörter nicht verstehen, was tatsächlich gedruckt wird.
icio
1
@icio - Mit Bindestrich versehene Wörter, mathematische Formeln, Kopf- und Fußzeilen machen es ziemlich schwierig, die Wörter in einem PDF zu zählen.
Geoff
1
@Geoff - Ich stimme zu, aber dies ist, soweit mir bekannt ist, ein häufiger Nachteil zwischen Wortzählern für PDF- und TeX-Dokumente.
icio
3
Diejenigen, die über eine Suche hier landen, sollten sich die aktuellere Antwort auf TeX.se ansehen: tex.stackexchange.com/questions/534/…
isomorphismes

Antworten:

71

Ich benutze texcount. Die Webseite verfügt über ein Perl-Skript zum Herunterladen (und ein Handbuch).

Es enthält texDateien, die im Dokument enthalten sind ( \inputoder \include) (siehe -inc), Makros unterstützen und viele andere nützliche Funktionen haben.

Wenn Sie den enthaltenen Dateien folgen, erhalten Sie Details zu jeder einzelnen Datei sowie eine Gesamtzahl. Hier ist zum Beispiel die Gesamtausgabe für ein 12-seitiges Dokument von mir:

TOTAL COUNT
Files: 20
Words in text: 4188
Words in headers: 26
Words in float captions: 404
Number of headers: 12
Number of floats: 7
Number of math inlines: 85
Number of math displayed: 19

Wenn Sie nur an der Summe interessiert sind, verwenden Sie das -totalArgument.

Geoff
quelle
Aber folgt es Links zu \includeund \inputDateien?
Andreas Grech
2
Ja, genau das -incmacht der Parameter (ich werde meine Antwort bearbeiten).
Geoff
Brillant. Habe gerade dieses Skript getestet und es funktioniert großartig! Prost Geoff
Andreas Grech
Cool. Ich habe nicht mit der Makrounterstützung gespielt. Wenn Sie Makros haben, die Text erzeugen, müssen Sie sich diesen Abschnitt ansehen.
Geoff
1
Wenn das , was Sie wollen, ich glaube , Sie tun können grep bibcite paper.aux | wc, wo paper.auxdie richtige sein sollte auxDatei für das Dokument, aber Sie werden das Dokument kompilieren müssen , um das zu bekommen auxDatei.
Geoff
13

Ich ging mit icios Kommentar und zählte das PDF selbst, indem ich die Ausgabe von pdftotextan wc:

pdftotext file.pdf - | wc - w 
Andreas Grech
quelle
2
Sei vorsichtig damit. Ich glaube, ein Wort, das über zwei Zeilen getrennt ist, wird als zwei Wörter angezeigt, nicht als eines. Kopf- und Fußzeilen werden ebenfalls gezählt. Schauen Sie sich die Ausgabe von an pdftotextund prüfen Sie, ob sie für Sie in Ordnung ist. Wenn Sie eine genaue Zählung wünschen, würde ich diese Lösung nicht verwenden.
Geoff
1
Diese Lösung ist nah genug, wenn Sie nur ein grobes Gefühl dafür bekommen möchten, wie groß Dokumente sind. Ich würde Geoff darin zustimmen, dass es nicht geeignet ist, sich an bestimmte publikationsbezogene Wortzahlen zu halten.
Joseph Lisee
Ich mag Ihre Idee, weil sie bibliografische Elemente enthält!
Dorien
7
latex file.tex
dvips -o - file.dvi | ps2ascii | wc -w

sollte Ihnen eine ziemlich genaue Wortzahl geben.

aioobe
quelle
Wenn Sie pdflatex verwenden, tun Sie es einfach pdftops file.texund dann habe ps2ascii|wc -wich diese Anzahl mit der Anzahl in Word verglichen, und von allen hier war es die mit der nächsten Nummer. Siehe meine Vergleiche in meiner Antwort
Fiacobelli
@fiacobelli sollte es seinpdftops file.pdf
prab4th
5

Um @aioobe hinzuzufügen,

Wenn Sie pdflatex verwenden, tun Sie es einfach

pdftops file.pdf
ps2ascii file.ps|wc -w

Ich habe diese Anzahl mit der Anzahl in Microsoft Word in einem 1599-Word-Dokument (gemäß Word) verglichen. pdftotextproduzierte einen Text mit mehr als 1700 Wörtern. texcountenthielt nicht die Referenzen und produzierte 1088 Wörter. ps2asciigab 1603 Wörter zurück. 4 mehr als in Word.

Ich sage, das ist eine ziemlich gute Zählung. Ich bin mir jedoch nicht sicher, wo der Unterschied von 4 Wörtern liegt. :) :)

Fiacobelli
quelle
Es sind wahrscheinlich getrennte Wörter über Linien oder Ligaturen.
The_Lucifer
5

In der Texmaker-Oberfläche können Sie die Wortzahl abrufen, indem Sie mit der rechten Maustaste in die PDF-Vorschau klicken:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Franck Dernoncourt
quelle
2

Overleaf hat eine Wortzählfunktion:

Overleaf v2:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Overleaf v1:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Franck Dernoncourt
quelle
1

Ich verwende das folgende VIM-Skript:

function! WC()
    let filename = expand("%")
    let cmd = "detex " . filename . " | wc -w | perl -pe 'chomp; s/ +//;'"
    let result = system(cmd)
    echo result . " words"
endfunction

… Aber es folgt keinen Links. Dies würde im Grunde bedeuten, die TeX-Datei zu analysieren , um alle verknüpften Dateien zu erhalten, nicht wahr?

Der Vorteil gegenüber den anderen Antworten besteht darin, dass keine Ausgabedatei (PDF oder PS) erstellt werden muss, um die Wortanzahl zu berechnen, sodass sie möglicherweise (je nach Verwendung) viel effizienter ist.

Obwohl der Kommentar von icio theoretisch korrekt ist, stellte ich fest, dass die obige Methode ziemlich genaue Schätzungen für die Anzahl der Wörter liefert. Bei den meisten Texten liegt es gut innerhalb der 5% -Marge, die in vielen Aufgaben verwendet wird.

Konrad Rudolph
quelle
Ein Hoch auf das Skript, aber das Folgen von Links ist ein Muss für mich, da mein Dokument ziemlich stark mit \includes strukturiert ist
Andreas Grech
0

Für ein sehr einfaches Artikelklassendokument schaue ich mir nur die Anzahl der Übereinstimmungen für einen regulären Ausdruck an, um Wörter zu finden. Ich verwende Sublime Text, daher funktioniert diese Methode möglicherweise nicht für Sie in einem anderen Editor, aber ich drücke einfach Ctrl+F( Command+Fauf dem Mac) und suche dann bei aktiviertem Regex nach

(^|\s+|"|((h|f|te){)|\()\w+

Dabei sollte Text ignoriert werden, der eine schwebende Umgebung oder Beschriftungen in Abbildungen deklariert, sowie die meisten Arten von Grundgleichungen und \usepackageDeklarationen, einschließlich Zitaten und Klammern. Es zählt auch Fußnoten und \emphasized Text und zählt \hyperrefLinks als ein Wort. Es ist nicht perfekt, aber normalerweise auf ein paar Dutzend Wörter genau. Sie könnten es verfeinern, um für Sie zu arbeiten, aber ein Skript ist wahrscheinlich eine bessere Lösung, da LaTeX-Quellcode keine reguläre Sprache ist. Ich dachte nur, ich würde das hier hochwerfen.

ocket8888
quelle
0

Wenn die Verwendung eines Vim-Plugins zu Ihnen passt, hat das Vimtex- Plugin das texcountTool recht gut integriert.

Hier ist ein Auszug aus ihrer Dokumentation:

:VimtexCountLetters       Shows the number of letters/characters or words in
:VimtexCountWords         the current project or in the selected region. The
                          count is created with `texcount` through a call on
                          the main project file similar to: >

                            texcount -nosub -sum [-letter] -merge -q -1 FILE
<
                          Note: Default arguments may be controlled with
                                |g:vimtex_texcount_custom_arg|.

                          Note: One may access the information through the
                                function `vimtex#misc#wordcount(opts)`, where
                                `opts` is a dictionary with the following
                                keys (defaults indicated): >

                                'range' : [1, line('$')]
                                'count_letters' : 0/1
                                'detailed' : 0
<
                                If `detailed` is 0, then it only returns the
                                total count. This makes it possible to use for
                                e.g. statusline functions. If the `opts` dict
                                is not passed, then the defaults are assumed.

                                             *VimtexCountLetters!*
                                             *VimtexCountWords!*
:VimtexCountLetters!      Similar to |VimtexCountLetters|/|VimtexCountWords|, but
:VimtexCountWords!        show separate reports for included files.  I.e.
                          presents the result of: >

                            texcount -nosub -sum [-letter] -inc FILE
<
                                             *VimtexImapsList*
                                             *<plug>(vimtex-imaps-list)*

Das Schöne daran ist, wie erweiterbar es ist. Zusätzlich zum Zählen der Anzahl der Wörter in Ihrer aktuellen Datei können Sie eine visuelle Auswahl treffen (z. B. zwei oder drei Absätze) und dann den Befehl nur auf Ihre Auswahl anwenden.

Benjamin Chausse
quelle