No sé si esto ayudaría a alguien, pero cuando estaba escribiendo mi tesis quería hacer dos cosas; (1) cuente el número de palabras para toda la tesis (en lugar de un solo capítulo) y (2) use un script de contador personalizado. El punto para este último era que evitaría secciones como resúmenes, declaraciones, etc. y solo seleccionaría los capítulos relevantes.
Cuenta palabras del archivo maestro
La solución aquí era simple; averiguar si el archivo en el que estamos es el maestro, de lo contrario, envíelo 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 un script personalizado
Lo hice agregando una custom-tex-counter
variable local al archivo incluido que apuntaba al script bash que era responsable del conteo de palabras.
Declarar la variable personalizada
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Agregue la ruta en las variables locales (final del .tex
archivo)
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Poniéndolo junto con lo anterior
(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))))
Como referencia, así es como se veía mi script personalizado (no olvide hacer que sea ejecutable):
#!/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
Básicamente, lo único que esto hace es a grep
los capítulos y apéndices no comentados del archivo maestro y contar las palabras allí.
Puede cambiar la expresión regular de cada proyecto para que coincida con la estructura que está utilizando, pero, si usa constantemente la misma estructura, puede colocar el script bash en algún lugar de su ruta y convertirlo en una variable global en emacs en lugar de una local.