मुझे नहीं पता कि इससे किसी को मदद मिलेगी, लेकिन जब मैं अपनी थीसिस लिख रहा था तो मैं दो चीजें करना चाहता था; (1) संपूर्ण थीसिस (एक अध्याय के बजाय) के लिए शब्दों की संख्या की गणना करें, और (2) एक कस्टम काउंटर स्क्रिप्ट का उपयोग करें। उत्तरार्द्ध के लिए बिंदु यह था कि यह अमूर्त, घोषणाओं आदि जैसे वर्गों से बचता है और केवल प्रासंगिक अध्यायों का चयन करता है।
मास्टर फ़ाइल से शब्द गिनें
यहाँ समाधान सरल था; पता लगाएँ कि क्या हम जिस फ़ाइल में हैं, वह मास्टर है, अन्यथा, उसे भेजें 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)))
एक कस्टम स्क्रिप्ट का उपयोग करें
मैंने यह किया कि custom-tex-counter
बाश लिपि की ओर इशारा करते हुए शामिल फ़ाइल में एक स्थानीय चर जोड़कर जो शब्द गिनती के लिए जिम्मेदार था।
कस्टम चर घोषित करें
(defvar custom-tex-counter nil)
(make-variable-buffer-local 'custom-tex-counter)
(put 'custom-tex-counter 'safe-local-variable #'stringp)
स्थानीय चरों में पथ जोड़ें ( .tex
फ़ाइल का अंत )
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "../thesis"
%%% custom-tex-counter: "../count_words -t"
%%% End:
इसे ऊपर से एक साथ मिलाकर
(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))))
यहाँ संदर्भ के लिए कि मेरी कस्टम स्क्रिप्ट क्या दिखती है (इसे निष्पादन योग्य बनाना न भूलें):
#!/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
मूल रूप से, यह केवल एक चीज grep
है जो मास्टर फ़ाइल से गैर-टिप्पणी किए गए अध्यायों और परिशिष्टों के लिए है और वहां शब्दों को गिनें।
आप जिस संरचना का उपयोग कर रहे हैं, उससे मेल खाने के लिए प्रत्येक प्रोजेक्ट के लिए रेगेक्स को बदल सकते हैं, लेकिन यदि आप लगातार एक ही संरचना का उपयोग करते हैं, तो आप बैश स्क्रिप्ट को अपने रास्ते में कहीं रख सकते हैं और इसे स्थानीय के बजाय emacs में एक वैश्विक चर बना सकते हैं।