ฉันไม่รู้ว่าจะช่วยใครได้ไหม แต่เมื่อฉันเขียนวิทยานิพนธ์ฉันต้องการทำสองสิ่ง; (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
บทที่ไม่มีความคิดเห็นและภาคผนวกจากไฟล์ต้นแบบและนับจำนวนคำที่มี
คุณสามารถเปลี่ยน regex สำหรับแต่ละโครงการเพื่อให้ตรงกับโครงสร้างที่คุณกำลังใช้ แต่ถ้าคุณใช้โครงสร้างเดียวกันอย่างสม่ำเสมอคุณสามารถใส่ bash script ที่ใดที่หนึ่งในเส้นทางของคุณและทำให้มันเป็นตัวแปรทั่วโลกใน emacs แทนที่จะเป็นหนึ่งในท้องถิ่น