Ich weiß nicht, ob dies jemandem helfen würde, aber als ich meine Doktorarbeit schrieb, wollte ich zwei Dinge tun; (1) Zählen Sie die Anzahl der Wörter für die gesamte Arbeit (anstelle eines einzelnen Kapitels), und (2) verwenden Sie ein benutzerdefiniertes Zählerskript. Letzteres bezog sich darauf, Abschnitte wie Zusammenfassungen, Erklärungen usw. zu vermeiden und nur die relevanten Kapitel auszuwählen.
Zähle Wörter aus der Hauptdatei
Die Lösung hier war einfach; Finden Sie heraus, ob die Datei, in der wir uns befinden, die Master-Datei ist, andernfalls senden Sie diese an texcount
.
(defun latex-word-count-master ()
(interactive)
(if (eq TeX-master t)
(setq master (buffer-file-name))
(setq master (concat (expand-file-name TeX-master) ".tex")))
(shell-command (concat "texcount "
"-dir "
"-unicode "
"-inc "
master)))
Verwenden Sie ein benutzerdefiniertes Skript
Dazu habe ich custom-tex-counter
der enthaltenen Datei eine lokale Variable hinzugefügt , die auf das Bash-Skript zeigt, das für die Wortzählung verantwortlich ist.
Deklarieren Sie die benutzerdefinierte Variable
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Füge den Pfad in die lokalen Variablen ein (Ende der .tex
Datei)
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Putting es zusammen mit dem oben genannten
(defun latex-word-count-alt ()
(interactive)
(if (eq TeX-master t)
(setq master (buffer-file-name))
(setq master (concat (expand-file-name TeX-master) ".tex")))
(if (not (eq custom-tex-counter nil))
(shell-command (concat custom-tex-counter
" "
master))
(shell-command (concat "texcount "
"-dir "
"-unicode "
"-inc "
master))))
Als Referenz sehen Sie hier, wie mein benutzerdefiniertes Skript aussah (vergessen Sie nicht, es ausführbar zu machen):
#!/usr/bin/bash
total='false'
while getopts 't' flag; do
case "${flag}" in
t) total='true' ;;
?) printf '\nUsage: %s: [-t] \n' $0; exit 2 ;;
esac
done
shift $(($OPTIND - 1))
TOPATH=$(dirname "${1}")
CHAPTERS=$(while read -r chapter; do
printf "%s%s.tex\n" "$TOPATH" "/$chapter";
done < <(grep -Po "^[^%]\s?\\include{\K(Chapter|Appendix)[[:digit:]]+/(chapter|appendix)[[:digit:]]+" "${1}") \
| paste -sd' ')
if [ "$total" == "false" ]; then
texcount -unicode -inc $CHAPTERS
else
texcount -unicode -total -inc $CHAPTERS
fi
Im Grunde ist das Einzige, was dies tut, grep
die nicht kommentierten Kapitel und Anhänge aus der Hauptdatei zu lesen und die Wörter dort zu zählen.
Sie können die reguläre Ausdrücke für jedes Projekt an die von Ihnen verwendete Struktur anpassen. Wenn Sie jedoch die gleiche Struktur verwenden, können Sie das Bash-Skript an einer beliebigen Stelle in Ihrem Pfad ablegen und es als globale Variable in Emacs anstatt als lokale Variable definieren.