Não sei se isso ajudaria alguém, mas quando estava escrevendo minha tese, queria fazer duas coisas; (1) conte o número de palavras para toda a tese (em vez de um único capítulo) e (2) use um script de contador personalizado. O ponto principal foi que ele evitaria seções como resumos, declarações etc. e selecionaria apenas os capítulos relevantes.
Contar palavras do arquivo mestre
A solução aqui foi simples; descobrir se o arquivo em que estamos é o principal, caso contrário, envie-o para 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)))
Use um script personalizado
Fiz isso adicionando uma custom-tex-counter
variável local ao arquivo incluído, apontando para o script bash, responsável pela contagem de palavras.
Declarar a variável personalizada
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Adicione o caminho nas variáveis locais (final do .tex
arquivo)
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Colocando junto com o acima
(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))))
Para referência, veja como era o meu script personalizado (não se esqueça de torná-lo executável):
#!/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
Basicamente, a única coisa que isso faz é grep
acessar os capítulos e anexos não comentados do arquivo mestre e contar as palavras.
Você pode alterar o regex de cada projeto para corresponder à estrutura que está usando, mas, se você usar consistentemente a mesma estrutura, poderá colocar o script bash em algum lugar do caminho e torná-lo uma variável global no emacs, em vez de local.