Last active
February 11, 2020 14:44
-
-
Save tsuu32/5d7a50dc2938725dd73e1d572873eb06 to your computer and use it in GitHub Desktop.
ClutTeX command for Emacs AUCTeX (experimental)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(add-hook 'plain-TeX-mode-hook | |
(lambda () (setq TeX-command-default "ClutTeX"))) | |
(add-hook 'LaTeX-mode-hook | |
(lambda () (setq TeX-command-default "ClutTeX"))) | |
(add-to-list 'TeX-expand-list | |
'("%(cltxengine)" | |
(lambda () | |
(cond | |
((eq major-mode 'plain-tex-mode) | |
(cond ((eq TeX-engine 'default) "pdftex") | |
((eq TeX-engine 'xetex) "xetex") | |
((eq TeX-engine 'luatex) "luatex") | |
((eq TeX-engine 'ptex) "ptex") | |
((eq TeX-engine 'uptex) "uptex"))) | |
((eq major-mode 'latex-mode) | |
(cond ((eq TeX-engine 'default) "pdflatex") | |
((eq TeX-engine 'xetex) "xelatex") | |
((eq TeX-engine 'luatex) "lualatex") | |
((eq TeX-engine 'ptex) "platex") | |
((eq TeX-engine 'uptex) "uplatex"))))))) | |
(add-to-list 'TeX-expand-list | |
'("%(cltxbibtex)" | |
(lambda () | |
(cond | |
(LaTeX-bibliography-list | |
(if LaTeX-using-Biber | |
"--biber" | |
(format "--bibtex=%s" | |
(cond ((eq TeX-engine 'ptex) "pbibtex") | |
((eq TeX-engine 'uptex) "upbibtex") | |
(t "bibtex"))))) | |
(t ""))))) | |
(add-to-list 'TeX-command-list | |
'("ClutTeX" "cluttex -e %(cltxengine) %(cltxbibtex) %S %t" | |
TeX-run-ClutTeX nil | |
(plain-tex-mode latex-mode) :help "Run ClutTeX")) | |
(defun TeX-run-ClutTeX (name command file) | |
"Create a process for NAME using COMMAND to convert FILE with ClutTeX." | |
(let ((process (TeX-run-command name command file))) | |
(setq TeX-sentinel-function #'TeX-ClutTeX-sentinel) | |
(if TeX-process-asynchronous | |
process | |
(TeX-synchronous-sentinel name file process)))) | |
(defun TeX-ClutTeX-sentinel (_process _name) | |
"Cleanup TeX output buffer after running ClutTeX." | |
(ansi-color-apply-on-region (point-min) (point-max)) | |
(goto-char (point-max)) | |
(cond | |
((search-backward "TeX Output exited abnormally" nil t) | |
(message "ClutTeX failed. Type `%s' to display output." | |
(substitute-command-keys | |
"\\<TeX-mode-map>\\[TeX-recenter-output-buffer]"))) | |
(t | |
(if (with-current-buffer TeX-command-buffer TeX-PDF-mode) | |
(setq TeX-output-extension "pdf" | |
TeX-command-next TeX-command-Show)) | |
(message "ClutTeX finished successfully.")))) | |
(defun ClutTeX-override-TeX-command-default (name) | |
"Guess the next command to be run on NAME." | |
(let ((command-next nil)) | |
(cond (;; name might be absolute or relative, so expand it for | |
;; comparison. | |
(if (string-equal (expand-file-name name) | |
(expand-file-name (TeX-region-file))) | |
(TeX-check-files (concat name "." (TeX-output-extension)) | |
;; Each original will be checked for all dirs | |
;; in `TeX-check-path' so this needs to be just | |
;; a filename without directory. | |
(list (file-name-nondirectory name)) | |
TeX-file-extensions) | |
(TeX-save-document (TeX-master-file))) | |
TeX-command-default) | |
((and (not (equal TeX-command-default "ClutTeX")) | |
(memq major-mode '(doctex-mode latex-mode)) | |
;; Want to know if bib file is newer than .bbl | |
;; We don't care whether the bib files are open in emacs | |
(TeX-check-files (concat name ".bbl") | |
(mapcar #'car | |
(LaTeX-bibliography-list)) | |
(append BibTeX-file-extensions | |
TeX-Biber-file-extensions))) | |
;; We should check for bst files here as well. | |
(if LaTeX-using-Biber TeX-command-Biber TeX-command-BibTeX)) | |
((and | |
;; Rationale: makeindex should be run when final document is almost | |
;; complete (see | |
;; https://tex-talk.net/2012/09/dont-forget-to-run-makeindex/), | |
;; otherwise, after following latex runs, index pages may change due | |
;; to changes in final document, resulting in extra makeindex and | |
;; latex runs. | |
(member | |
(setq command-next | |
(TeX-process-get-variable | |
name | |
'TeX-command-next | |
(or (and TeX-PDF-mode (TeX-PDF-from-DVI)) | |
TeX-command-Show))) | |
(list "Dvips" "Dvipdfmx" TeX-command-Show)) | |
(cdr (assoc (expand-file-name (concat name ".idx")) | |
LaTeX-idx-changed-alist))) | |
"Index") | |
(command-next) | |
(TeX-command-Show)))) | |
(advice-add 'TeX-command-default :override #'ClutTeX-override-TeX-command-default) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
AUXTeX の TeX-plain-tex-mode、TeX-latex-mode にて、
C-c C-c
で ClutTeX コマンドが使えます。後でちゃんとしたパッケージにするかもしれないし、しないかもしれない。
C-c C-c ClutTeX
: いい感じの引数でcluttex
を実行C-c C-l
: 端末で実行したときと同様に色付けされる--synctex=1
オプション:TeX-source-correlate-mode
有効時につくバグってたら
C-u C-c C-c ClutTeX
で何実行しているか確認してみてください。