Non so se questo avrebbe aiutato nessuno, ma quando stavo scrivendo la mia tesi volevo fare due cose; (1) conta il numero di parole per l'intera tesi (anziché un singolo capitolo) e (2) usa un contatore di script personalizzato. Il punto per quest'ultimo era che avrebbe evitato sezioni come abstract, dichiarazioni, ecc. E avrebbe selezionato solo i capitoli pertinenti.
Conta le parole dal file principale
La soluzione qui era semplice; capire se il file in cui ci troviamo è quello principale, altrimenti inviarlo a 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)))
Usa uno script personalizzato
L'ho fatto aggiungendo una custom-tex-counter
variabile locale al file incluso che punta allo script bash che era responsabile del conteggio delle parole.
Dichiarare la variabile personalizzata
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Aggiungi il percorso nelle variabili locali (fine del .tex
file)
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Mettendolo insieme a quanto sopra
(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))))
Per riferimento ecco come appariva il mio script personalizzato (non dimenticare di renderlo eseguibile):
#!/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
Fondamentalmente, l'unica cosa che fa è per grep
i capitoli e le appendici non commentati dal file master e contare le parole lì.
Puoi modificare la regex per ogni progetto in modo che corrisponda alla struttura che stai utilizzando ma, se usi costantemente la stessa struttura, puoi mettere lo script bash da qualche parte nel tuo percorso e trasformarlo in una variabile globale in emacs anziché in una locale.