Saya tidak tahu apakah ini akan membantu siapa pun, tetapi ketika saya sedang menulis tesis saya, saya ingin melakukan dua hal; (1) hitung jumlah kata untuk seluruh tesis (bukan satu bab), dan (2) gunakan skrip penghitung khusus. Maksudnya adalah bahwa ia akan menghindari bagian-bagian seperti abstrak, deklarasi, dll. Dan hanya memilih bab-bab yang relevan.
Hitung kata-kata dari file master
Solusi di sini sederhana; mencari tahu apakah file yang kita gunakan adalah file master, jika tidak, kirimkan ke 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)))
Gunakan skrip khusus
Saya melakukannya dengan menambahkan custom-tex-counter
variabel lokal ke file yang disertakan yang menunjuk ke skrip bash yang bertanggung jawab untuk penghitungan kata.
Nyatakan variabel khusus
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Tambahkan path di variabel lokal (akhir .tex
file)
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Menyatukannya dengan yang di atas
(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))))
Untuk referensi inilah yang terlihat seperti skrip kustom saya (jangan lupa untuk membuatnya dapat dieksekusi):
#!/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
Pada dasarnya, satu-satunya hal yang dilakukan adalah grep
bab dan lampiran yang tidak dikomentari dari file master dan menghitung kata-kata di sana.
Anda dapat mengubah regex untuk setiap proyek agar sesuai dengan struktur yang Anda gunakan tetapi, jika Anda secara konsisten menggunakan struktur yang sama, Anda dapat meletakkan skrip bash di suatu tempat di jalur Anda dan menjadikannya variabel global dalam emacs alih-alih yang lokal.