Emacs > TeX mode
TeX mode は TeX ファイルを編集・タイプセット・プレビューするための Emacs のメジャーモードです. Emacs には標準で含まれています.
標準添付ですが,設定すれば十分に使い物になります. しかし,TeX mode を拡張したものとして,国内では YaTeX,海外では AUCTeX がよく使われているため,Web 上の情報量もこれらについてのものが多いです. 機能もこれらの方が豊富なので,どれを使用するかは比較検討して下さい.
メニュー [TeX] キーバインド 機能 TeX File C-c C-f タイプセット TeX Kill C-c C-k タイプセットを中断 BibTeX File C-c C-i または C-c TAB Biblatex, BibTeX TeX View C-c C-v プレビュー TeX Print C-c C-p 印刷 C-c C-c ユーザー定義コマンドの実行 C-c C-o \begin{...} ... \end{...} の補完 C-c C-e \end{...} の補完 C-c C-u 環境内の \begin{...} の先頭に移動 C-M-m \item を入力 C-c C-m または C-c RET *tex-shell* バッファに RET を入力として送る
C-c C-f によるタイプセットは,設定ファイルにおいて latex-run-command(latex-mode の場合.tex-mode の場合は tex-run-command)にセットされたコマンドが実行されます. デフォルトのコマンドは latex,つまり欧文用なので,このままでは日本語は出ません. 下の設定例を参考に,ptex2pdf などに変更して下さい.
同様に,BibTeX のコマンドのデフォルトは bibtex,プレビューコマンドのデフォルトは xdvi (X Window System), yap (Windows), dvi2tty(それ以外)ですので,適宜変更する必要があります.
プレビューコマンドと印刷コマンドを PDF ビューアに変更する場合は tex-print-file-extension を ".pdf" に設定して tex-dvi-view-command と tex-dvi-print-command をそれぞれ使用する PDF ビューアに設定してください.
platex, uplatex, pdflatex, xelatex, lualatex など,複数のコマンドを併用したいときもあると思います. このような時にはユーザー定義コマンド (tex-compile-commands) に登録しておくと,C-c C-c で選択することができます.
ユーザー定義コマンドは C-c C-c C-i または C-c C-c TAB で一覧が表示できます. 一覧の中からマウスでクリックすると実行されます. キーボードを使用する場合はある程度キーボードで入力して C-i または TAB を入力すると補完されます.
TeX mode, AUCTeX, YaTeX では " を入力しようとすると `` が入力されます. `` ではなく " を入力したい場合は ""(" を2回打つ)か C-q " (Ctrl-Q を入力した後で " を入力) とします.
Emacs を起動して
C-x C-f ~/
でホームディレクトリ (~/) の場所を確認します. ~/.emacs.d/ が無ければ新規に作成し,~/.emacs.d/init.el に設定を記述します.
;; ;; TeX mode ;; (setq auto-mode-alist (append '(("\\.tex$" . latex-mode)) auto-mode-alist)) (setq tex-default-mode 'latex-mode) (setq tex-start-commands "\\nonstopmode\\input") (setq tex-run-command "ptex2pdf -u -e -ot \"-kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode\"") ;(setq tex-run-command "luatex -synctex=1 -interaction=nonstopmode") (setq latex-run-command "ptex2pdf -u -l -ot \"-kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode\"") ;(setq latex-run-command "lualatex -synctex=1 -interaction=nonstopmode") (setq tex-bibtex-command "latexmk -e \"$latex=q/uplatex %O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %S/\" -e \"$bibtex=q/bibtexu %O %B/\" -e \"$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/\" -e \"$makeindex=q/upmendex %O -o %D %S/\" -e \"$dvipdf=q/dvipdfmx %O -o %D %S/\" -norc -gg -pdfdvi") (setq tex-print-file-extension ".pdf") (setq tex-dvi-view-command "start SumatraPDF -reuse-instance") (setq tex-dvi-print-command "start Acrobat") (setq tex-compile-commands '(("ptex2pdf -u -l -ot \"-kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode\" %f" "%f" "%r.pdf") ("lualatex -synctex=1 -interaction=nonstopmode %f" "%f" "%r.pdf") ("latexmk %f" "%f" "%r.pdf") ("latexmk -e \"$latex=q/uplatex %%O -kanji=utf8 -no-guess-input-enc -synctex=1 -interaction=nonstopmode %%S/\" -e \"$bibtex=q/bibtexu %%O %%B/\" -e \"$biber=q/biber %%O --bblencoding=utf8 -u -U --output_safechars %%B/\" -e \"$makeindex=q/upmendex %%O -o %%D %%S/\" -e \"$dvipdf=q/dvipdfmx %%O -o %%D %%S/\" -norc -gg -pdfdvi %f" "%f" "%r.pdf") ("latexmk -e \"$lualatex=q/lualatex %%O -synctex=1 -interaction=nonstopmode %%S/\" -e \"$bibtex=q/bibtexu %%O %%B/\" -e \"$biber=q/biber %%O --bblencoding=utf8 -u -U --output_safechars %%B/\" -e \"$makeindex=q/upmendex %%O -o %%D %%S/\" -norc -gg -pdflua %f" "%f" "%r.pdf") ((concat "\\doc-view" " \"" (car (split-string (format "%s" (tex-main-file)) "\\.")) ".pdf\"") "%r.pdf") ("powershell -Command \"& {$r = Write-Output %r.pdf;$p = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFileName($r),'\"\"\"');Start-Process SumatraPDF -ArgumentList ('-reuse-instance',$p)}\"" "%r.pdf") ("texworks %r.pdf" "%r.pdf") ("texstudio --pdf-viewer-only %r.pdf" "%r.pdf") ("powershell -Command \"& {$r = Write-Output %r.pdf;$p = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFileName($r),'\"\"\"');Start-Process firefox -ArgumentList ('-new-window',$p)}\"" "%r.pdf") ("powershell -Command \"& {$r = Write-Output %r.pdf;$p = [System.String]::Concat('\"\"\"',[System.IO.Path]::GetFullPath($r),'\"\"\"');Start-Process chrome -ArgumentList ('--new-window',$p)}\"" "%r.pdf") ("start Acrobat %r.pdf" "%r.pdf"))) (defun sumatrapdf-forward-search () (interactive) (let* ((ctf (buffer-name)) (mtf (tex-main-file)) (pf (concat (car (split-string mtf "\\.")) ".pdf")) (ln (format "%d" (line-number-at-pos))) (cmd "rundll32 shell32,ShellExec_RunDLL SumatraPDF") (args (concat "-reuse-instance \"" pf "\" -forward-search \"" ctf "\" " ln))) (message (concat cmd " " args)) (process-query-on-exit-flag (start-process-shell-command "sumatrapdf" nil cmd args)))) (add-hook 'latex-mode-hook '(lambda () (define-key latex-mode-map (kbd "C-c s") 'sumatrapdf-forward-search))) (defun fwdsumatrapdf-forward-search () (interactive) (let* ((ctf (buffer-name)) (mtf (tex-main-file)) (pf (concat (car (split-string mtf "\\.")) ".pdf")) (ln (format "%d" (line-number-at-pos))) (cmd "fwdsumatrapdf") (args (concat "\"" pf "\" \"" ctf "\" " ln))) (message (concat cmd " " args)) (process-query-on-exit-flag (start-process-shell-command "fwdsumatrapdf" nil cmd args)))) (add-hook 'latex-mode-hook '(lambda () (define-key latex-mode-map (kbd "C-c f") 'fwdsumatrapdf-forward-search))) ;; ;; RefTeX with TeX mode ;; (add-hook 'latex-mode-hook 'turn-on-reftex)
動作未確認です.
;; ;; PATH ;; (setenv "PATH" "/usr/local/bin:/Library/TeX/texbin/:/Applications/Skim.app/Contents/SharedSupport:$PATH" t) (setq exec-path (append '("/usr/local/bin" "/Library/TeX/texbin" "/Applications/Skim.app/Contents/SharedSupport") exec-path)) ;; ;; TeX mode ;; (setq auto-mode-alist (append '(("\\.tex$" . latex-mode)) auto-mode-alist)) (setq tex-default-mode 'latex-mode) (setq tex-start-commands "\\nonstopmode\\input") (setq tex-run-command "ptex2pdf -u -e -ot '-synctex=1 -interaction=nonstopmode'") ;(setq tex-run-command "luatex -synctex=1 -interaction=nonstopmode") (setq latex-run-command "ptex2pdf -u -l -ot '-synctex=1 -interaction=nonstopmode'") ;(setq latex-run-command "lualatex -synctex=1 -interaction=nonstopmode") (setq tex-bibtex-command "latexmk -e '$latex=q/uplatex %O -synctex=1 -interaction=nonstopmode %S/' -e '$bibtex=q/bibtexu %O %B/' -e '$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/' -e '$makeindex=q/upmendex %O -o %D %S/' -e '$dvipdf=q/dvipdfmx %O -o %D %S/' -norc -gg -pdfdvi") (setq tex-print-file-extension ".pdf") (setq tex-dvi-view-command "open -a Skim") (setq tex-dvi-print-command "open -a \"Adobe Acrobat Reader DC\"") (setq tex-compile-commands '(("ptex2pdf -u -l -ot '-synctex=1 -interaction=nonstopmode' %f" "%f" "%r.pdf") ("lualatex -synctex=1 -interaction=nonstopmode %f" "%f" "%r.pdf") ("latexmk %f" "%f" "%r.pdf") ("latexmk -e '$latex=q/uplatex %%O -synctex=1 -interaction=nonstopmode %%S/' -e '$bibtex=q/bibtexu %%O %%B/' -e '$biber=q/biber %%O --bblencoding=utf8 -u -U --output_safechars %%B/' -e '$makeindex=q/upmendex %%O -o %%D %%S/' -e '$dvipdf=q/dvipdfmx %%O -o %%D %%S/' -norc -gg -pdfdvi %f" "%f" "%r.pdf") ("latexmk -e '$lualatex=q/lualatex %%O -synctex=1 -interaction=nonstopmode %%S/' -e '$bibtex=q/bibtexu %%O %%B/' -e '$biber=q/biber %%O --bblencoding=utf8 -u -U --output_safechars %%B/' -e '$makeindex=q/upmendex %%O -o %%D %%S/' -norc -gg -pdflua %f" "%f" "%r.pdf") ((concat "\\doc-view" " \"" (car (split-string (format "%s" (tex-main-file)) "\\.")) ".pdf\"") "%r.pdf") ("open -a Skim %r.pdf" "%r.pdf") ("open -a Preview %r.pdf" "%r.pdf") ("open -a TeXShop %r.pdf" "%r.pdf") ("/Applications/TeXworks.app/Contents/MacOS/TeXworks %r.pdf" "%r.pdf") ("/Applications/texstudio.app/Contents/MacOS/texstudio --pdf-viewer-only %r.pdf" "%r.pdf") ("open -a Firefox %r.pdf" "%r.pdf") ("open -a \"Google Chrome\" %r.pdf" "%r.pdf") ("open -a \"Adobe Acrobat Reader DC\" %r.pdf" "%r.pdf"))) (defun skim-forward-search () (interactive) (let* ((ctf (buffer-name)) (mtf (tex-main-file)) (pf (concat (car (split-string mtf "\\.")) ".pdf")) (ln (format "%d" (line-number-at-pos))) (cmd "/Applications/Skim.app/Contents/SharedSupport/displayline") (args (concat ln " " pf " " ctf))) (message (concat cmd " " args)) (process-query-on-exit-flag (start-process-shell-command "displayline" nil cmd args)))) (add-hook 'latex-mode-hook '(lambda () (define-key latex-mode-map (kbd "C-c s") 'skim-forward-search))) ;; ;; RefTeX with TeX mode ;; (add-hook 'latex-mode-hook 'turn-on-reftex)
fwdevince は Evince/fwdevince にあるものを使用することを想定します.
;; ;; TeX mode ;; (setq auto-mode-alist (append '(("\\.tex$" . latex-mode)) auto-mode-alist)) (setq tex-default-mode 'latex-mode) (setq tex-start-commands "\\nonstopmode\\input") (setq tex-run-command "ptex2pdf -u -e -ot '-synctex=1 -interaction=nonstopmode'") ;(setq tex-run-command "luatex -synctex=1 -interaction=nonstopmode") (setq latex-run-command "ptex2pdf -u -l -ot '-synctex=1 -interaction=nonstopmode'") ;(setq latex-run-command "lualatex -synctex=1 -interaction=nonstopmode") (setq tex-bibtex-command "latexmk -e '$latex=q/uplatex %O -synctex=1 -interaction=nonstopmode %S/' -e '$bibtex=q/bibtexu %O %B/' -e '$biber=q/biber %O --bblencoding=utf8 -u -U --output_safechars %B/' -e '$makeindex=q/upmendex %O -o %D %S/' -e '$dvipdf=q/dvipdfmx %O -o %D %S/' -norc -gg -pdfdvi") (setq tex-print-file-extension ".pdf") (setq tex-dvi-view-command "evince") (setq tex-dvi-print-command "perl -e 'system(\"wine64 cmd /c start Acrobat.exe `basename $ARGV[0]`\")'") (setq tex-compile-commands '(("ptex2pdf -u -l -ot '-synctex=1 -interaction=nonstopmode' %f" "%f" "%r.pdf") ("lualatex -synctex=1 -interaction=nonstopmode %f" "%f" "%r.pdf") ("latexmk %f" "%f" "%r.pdf") ("latexmk -e '$latex=q/uplatex %%O -synctex=1 -interaction=nonstopmode %%S/' -e '$bibtex=q/bibtexu %%O %%B/' -e '$biber=q/biber %%O --bblencoding=utf8 -u -U --output_safechars %%B/' -e '$makeindex=q/upmendex %%O -o %%D %%S/' -e '$dvipdf=q/dvipdfmx %%O -o %%D %%S/' -norc -gg -pdfdvi %f" "%f" "%r.pdf") ("latexmk -e '$lualatex=q/lualatex %%O -synctex=1 -interaction=nonstopmode %%S/' -e '$bibtex=q/bibtexu %%O %%B/' -e '$biber=q/biber %%O --bblencoding=utf8 -u -U --output_safechars %%B/' -e '$makeindex=q/upmendex %%O -o %%D %%S/' -norc -gg -pdflua %f" "%f" "%r.pdf") ((concat "\\doc-view" " \"" (car (split-string (format "%s" (tex-main-file)) "\\.")) ".pdf\"") "%r.pdf") ("xdg-open %r.pdf &" "%r.pdf") ("evince %r.pdf &" "%r.pdf") ("okular --unique %r.pdf &" "%r.pdf") ("zathura -x \"emacsclient --no-wait +%%{line} %%{input}\" %r.pdf &" "%r.pdf") ("qpdfview --unique %r.pdf &" "%r.pdf") ("texworks %r.pdf &" "%r.pdf") ("texstudio --pdf-viewer-only %r.pdf" "%r.pdf") ("mupdf %r.pdf &" "%r.pdf") ("firefox -new-window %r.pdf &" "%r.pdf") ("chromium --new-window %r.pdf &" "%r.pdf") ("wine64 cmd /c start Acrobat.exe %r.pdf &" "%r.pdf"))) (defun evince-forward-search () (interactive) (let* ((ctf (buffer-name)) (mtf (tex-main-file)) (pf (concat (car (split-string mtf "\\.")) ".pdf")) (ln (format "%d" (line-number-at-pos))) (cmd "fwdevince") (args (concat "\"" pf "\" " ln " \"" ctf "\""))) (message (concat cmd " " args)) (process-query-on-exit-flag (start-process-shell-command "fwdevince" nil cmd args)))) (add-hook 'latex-mode-hook '(lambda () (define-key latex-mode-map (kbd "C-c e") 'evince-forward-search))) (require 'dbus) (defun un-urlify (fname-or-url) "A trivial function that replaces a prefix of file:/// with just /." (if (string= (substring fname-or-url 0 8) "file:///") (substring fname-or-url 7) fname-or-url)) (defun evince-inverse-search (file linecol &rest ignored) (let* ((fname (decode-coding-string (url-unhex-string (un-urlify file)) 'utf-8)) (buf (find-file fname)) (line (car linecol)) (col (cadr linecol))) (if (null buf) (message "[Synctex]: %s is not opened..." fname) (switch-to-buffer buf) (goto-line (car linecol)) (unless (= col -1) (move-to-column col)) (x-focus-frame (selected-frame))))) (dbus-register-signal :session nil "/org/gnome/evince/Window/0" "org.gnome.evince.Window" "SyncSource" 'evince-inverse-search) (defun okular-forward-search () (interactive) (let* ((ctf (buffer-file-name)) (mtf (tex-main-file)) (pf (concat (car (split-string mtf "\\.")) ".pdf")) (ln (format "%d" (line-number-at-pos))) (cmd "okular") (args (concat "--unique \"file:" pf "#src:" ln " " ctf "\""))) (message (concat cmd " " args)) (process-query-on-exit-flag (start-process-shell-command "okular" nil cmd args)))) (add-hook 'latex-mode-hook '(lambda () (define-key latex-mode-map (kbd "C-c o") 'okular-forward-search))) (defun zathura-forward-search () (interactive) (let* ((ctf (buffer-name)) (mtf (tex-main-file)) (pf (concat (car (split-string mtf "\\.")) ".pdf")) (ln (format "%d" (line-number-at-pos))) (cmd "zathura") (args (concat "--synctex-forward " ln ":0:" ctf " " pf))) (message (concat cmd " " args)) (process-query-on-exit-flag (start-process-shell-command "zathura" nil cmd args)))) (add-hook 'latex-mode-hook '(lambda () (define-key latex-mode-map (kbd "C-c z") 'zathura-forward-search))) (defun qpdfview-forward-search () (interactive) (let* ((ctf (buffer-name)) (mtf (tex-main-file)) (pf (concat (car (split-string mtf "\\.")) ".pdf")) (ln (format "%d" (line-number-at-pos))) (cmd "qpdfview") (args (concat "--unique \"" pf "#src:" ctf ":" ln ":0\""))) (message (concat cmd " " args)) (process-query-on-exit-flag (start-process-shell-command "qpdfview" nil cmd args)))) (add-hook 'latex-mode-hook '(lambda () (define-key latex-mode-map (kbd "C-c q") 'qpdfview-forward-search))) ;; ;; RefTeX with TeX mode ;; (add-hook 'latex-mode-hook 'turn-on-reftex)