Je ne sais pas si cela aiderait quelqu'un, mais quand j'écrivais ma thèse, je voulais faire deux choses; (1) compter le nombre de mots pour l'ensemble de la thèse (au lieu d'un seul chapitre), et (2) utiliser un contre-script personnalisé. Le point pour ce dernier était qu'il éviterait les sections telles que les résumés, les déclarations, etc. et ne sélectionnerait que les chapitres pertinents.
Compter les mots du fichier maître
La solution ici était simple; déterminer si le fichier dans lequel nous nous trouvons est le fichier principal, sinon, envoyez-le à 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)))
Utilisez un script personnalisé
Je l'ai fait en ajoutant une custom-tex-counter
variable locale au fichier inclus pointant vers le script bash qui était responsable du comptage de mots.
Déclarez la variable personnalisée
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Ajouter le chemin dans les variables locales (fin de .tex
fichier)
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Assembler avec ce qui précède
(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))))
Pour référence, voici à quoi ressemblait mon script personnalisé (n'oubliez pas de le rendre exécutable):
#!/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
Fondamentalement, la seule chose que cela fait est aux grep
chapitres et annexes non commentés du fichier maître et compte les mots là-bas.
Vous pouvez modifier l'expression régulière de chaque projet pour qu'elle corresponde à la structure que vous utilisez mais, si vous utilisez systématiquement la même structure, vous pouvez placer le script bash quelque part sur votre chemin et en faire une variable globale dans emacs au lieu d'une variable locale.