これがだれにも役立つかどうかはわかりませんが、論文を書いているときに2つのことをしたかったのです。(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のグローバル変数にすることができます。