Skip to content

Instantly share code, notes, and snippets.

@tsuu32
Last active February 11, 2020 14:44
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tsuu32/5d7a50dc2938725dd73e1d572873eb06 to your computer and use it in GitHub Desktop.
Save tsuu32/5d7a50dc2938725dd73e1d572873eb06 to your computer and use it in GitHub Desktop.
ClutTeX command for Emacs AUCTeX (experimental)
(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)
@tsuu32
Copy link
Author

tsuu32 commented Feb 4, 2020

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で何実行しているか確認してみてください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment