Bunun kimseye yardım edip etmeyeceğini bilmiyorum, ama tezimi yazarken iki şey yapmak istedim; (1) tüm tez için sözcük sayısını (tek bir bölüm yerine) sayın ve (2) özel bir sayaç komut dosyası kullanın. İkincisi için nokta, özetler, bildiriler vb. Bölümlerden kaçınması ve sadece ilgili bölümleri seçmesiydi.
Ana dosyadaki kelimeleri sayma
Buradaki çözüm basitti; İçinde bulunduğumuz dosyanın ana dosya olup olmadığını anlayın, aksi takdirde bunu gönderin 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)))
Özel komut dosyası kullanma
Bunu, custom-tex-counter
kelime sayımından sorumlu olan bash betiğine işaret eden dosyaya yerel bir değişken ekleyerek yaptım .
Özel değişkeni bildirin
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
Yerel değişkenlere yol ekleyin ( .tex
dosya sonu )
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
Yukarıdakilerle bir araya getirmek
(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))))
Referans için benim özel komut dosyası neye benzediğini (çalıştırılabilir yapmayı unutmayın):
#!/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
Temel olarak, bunun tek yaptığı, grep
ana dosyadaki yorumlanmamış bölümlere ve eklere ve sözleri orada saymaktır.
Her projenin normal ifadesini, kullandığınız yapıya uyacak şekilde değiştirebilirsiniz, ancak sürekli olarak aynı yapıyı kullanırsanız, bash betiğini yolunuzda bir yere koyabilir ve emacs'ta yerel yerine global bir değişken yapabilirsiniz.