Nie wiem, czy to pomogłoby komukolwiek, ale kiedy pisałem pracę magisterską, chciałem zrobić dwie rzeczy; (1) policz liczbę słów dla całej pracy magisterskiej (zamiast jednego rozdziału) i (2) użyj niestandardowego skryptu licznika. Chodziło o to, że omijałoby to takie sekcje jak streszczenia, deklaracje itp. I wybierało tylko odpowiednie rozdziały.
Policz słowa z pliku głównego
Rozwiązanie tutaj było proste; dowiedz się, czy plik, w którym się znajdujemy, jest plikiem głównym, w przeciwnym razie wyślij go na adres 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)))
Użyj skryptu niestandardowego
Zrobiłem to, dodając custom-tex-counter
zmienną lokalną do dołączonego pliku, wskazując skrypt bash, który był odpowiedzialny za liczenie słów.
Zadeklaruj zmienną niestandardową
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Dodaj ścieżkę do zmiennych lokalnych (koniec .tex
pliku)
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Łącząc to z powyższym
(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))))
Dla odniesienia oto, jak wyglądał mój własny skrypt (nie zapomnij, aby był wykonywalny):
#!/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
Zasadniczo jedyne, co robi, to grep
nieskomentowane rozdziały i dodatki z pliku głównego i policz tam słowa.
Możesz zmienić regex dla każdego projektu, aby pasował do struktury, której używasz, ale jeśli konsekwentnie używasz tej samej struktury, możesz umieścić skrypt bash gdzieś na swojej ścieżce i uczynić go zmienną globalną w emacs zamiast lokalnej.