Я не знаю, поможет ли это кому-нибудь, но когда я писал свою диссертацию, я хотел сделать две вещи; (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 "$" in t) total='true' ;; ?) printf '\nUsage: %s: [-t] \n' $0; exit 2 ;; esac done shift $(($OPTIND - 1)) TOPATH=$(dirname "$") 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:]]+" "$") \ | paste -sd' ') if [ "$total" == "false" ]; then texcount -unicode -inc $CHAPTERS else texcount -unicode -total -inc $CHAPTERS fi
По сути, единственное, что это делает, - grep
это некомментированные главы и приложения из мастер-файла и подсчет там слов.
Вы можете изменить регулярное выражение для каждого проекта, чтобы оно соответствовало используемой структуре, но, если вы постоянно используете одну и ту же структуру, вы можете поместить сценарий bash где-нибудь на вашем пути и сделать его глобальной переменной в emacs вместо локальной.