Я не знаю, чи допоможе це комусь, але коли я писав дипломну роботу, я хотів зробити дві речі; (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
локальну змінну до включеного файлу, що вказує на скрипт bash, який відповідав за підрахунок слів.
Заявіть про власну змінну
(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
це не коментовані глави та додатки з головного файлу та підраховують слова там.
Ви можете змінити регулярний вираз для кожного проекту, щоб він відповідав структурі, яку ви використовуєте, але якщо ви послідовно використовуєте ту саму структуру, ви можете помістити скрипт bash десь на своєму шляху і зробити його глобальною змінною в emacs замість локальної.