ここから本文です

この知恵ノートを「知恵コレクション」に追加しました。

追加した知恵ノートはMy知恵袋の「知恵コレクション」ページで確認できます。

知恵コレクション」に登録済みです。

再登録しました。

追加に失敗しました。

ノートに戻り、もう一度やり直してください。

すでに1,000件のノートが登録されています。

新しく追加したい場合は、My知恵袋の「知恵コレクション」ページで登録されているノートを削除してください。

追加できませんでした。

ノートは削除されました。

TeX−出力(DVI・PDF)の完全同期〜Linuxユーザー向け〜

ライターさん(最終更新日時:2013/11/8)投稿日:

  • ナイス!:

    0

  • 閲覧数:1205

印刷用のページを表示する

0.アブストラクト

これは、私が書いたノート「初心者がLinux Mintを導入する」の「TeXの導入」〜「TeXのコンパイルの自動化」辺りをまとめたものです。

どういうことかというと、

  1. テキストエディタ(Emacs)でTeXファイルを編集する
  2. 逐一自動でセーブとコンパイルが実行される
  3. DVIビューワー(xdvi)やPDFビューワー(evince)の表示が逐一変わる(テキストエディタとTeXの出力が同期する)
ということができるようになります。

コンセプトとしては、やってることの意味とか書かず、淡々とやり方だけ書いていく感じです。
拙いですが、やってることの意味は一応初心者がLinux Mintを導入する」の方には書いてます(TeXに関してはLinux Mint特有のことは何も無いです)。

なので、本当の本当に初心者の方はググりながら読むか、初心者がLinux Mintを導入する」の「TeXの導入」以降を読んでください。再度言いますが、Linux Mintに特化した説明ではなく、以下の「1.使うもの」にあるものがある環境であれば、全く問題ありません。Debian系のUbuntuだろうが、Red Hut系のFedoraだろうがおそらく問題ないでしょう。多分ですけど、Macユーザーでも何とかなると思います。

また、TeXの環境は整ってる前提で進めますので、できてない人は初心者がLinux Mintを導入する」の「TeXの導入」を読んでください。

これを作ったモチベーションは、先に挙げたノートにも書いてるのですが、Linux Mint+TeXを使う人って絶対少ないので、もっと多くの人に見てもらいたいと思ったからです。
TeXとその出力を同期させる方法はないのかと知恵袋で質問したこともあるのですが、私がこれから説明する方法を答えてくれた方はいなかったので、この方法は有名ではないんじゃないかと思います。

ですから広めたい訳です。

1.使うもの

  • 端末(ターミナル)
  • (Synapticパッケージマネージャ)
  • Emacs
  • TeXの環境
  • latexmk
  • (YaTeX)

2.latexmkの設定

1.
latexmkをSynapticパッケージマネージャでインストールするか、もしくは端末でapt-getコマンドを用いてインストールする

2.
端末で
$ emacs ~/.latexmkrc
と打ち込む

      3.
      .latexmkrcに次をコピペする
      $latex  = 'platex -src-specials -file-line-error -interaction=nonstopmode';
      $bibtex = 'jbibtex';
        $dvipdf = 'dvipdfmx %O -o %D %S';
          $dvips  = 'pdvips';
            $dvi_previewer = 'start xdvi';
              $pdf_previewer = 'start evince';   
              latexmk6.png

              3.Emacsの自動セーブの設定

              1.
              端末で次を実行し、elispディレクトリを作る
              $ mkdir .emacs.d
              $ cd .emacs.d
              $ mkdir elisp

              2.
              init.elを作成する
              $ emacs init.el

              3.
              init.elに次をコピペ(いらない機能には「;」を最初につける)
              ;;
              ;; ロードパス
              ;;
              (setq load-path (cons "~/.emacs.d/elisp" load-path))

              ;; install-elisp の読み込み
              (require 'install-elisp)
              ;; Elisp ファイルをインストールする場所を指定
              (setq install-elisp-repository-directory "~/.emacs.d/elisp/")  

              ;;
              ;; 自動保存(auto-save-buffers.el) 
              ;;
              (require 'auto-save-buffers)
              (run-with-idle-timer 0.5 t 'auto-save-buffers)

              ;;
              ;; 行番号表示
              ;;
              (global-linum-mode t)

              ;;
              ;; 対応する括弧を光らせる
              ;;
              (show-paren-mode)

              ;;
              ;; スクロールバーを右側に表示する
              ;;
              (set-scroll-bar-mode 'right) 
              ltxmk21.png

              4.
              端末で以下を実行する
              $ cd elisp

              5.
              install-elispをインストールしたい人は次も実行(latexmkには全く関係ない)

              3.使い方

              端末で
              $ latexmk -pvc *.tex
              と実行すると、TeXファイルがコンパイルされ、xdviが立ち上がる。
              texファイルをEmacsで編集していれば、Emacsとxdviが同期する。

              端末で
              $ latexmk -pvc -pdfdvi *.tex
              と実行すると、xdviでなく、evinceが*.pdfを表示する。
              こちらでも同期するが、xdviに比べるとラグが大きい。使えないことはないが。

              4.YaTeXも合わせた使い方

              1.
              Synapticパッケージマネージャもしくはapt-getを用いて、「yatex」をインストールする

              2.
              init.elに次を追加
              ;;
              ;; YaTeX
              ;;
              (add-to-list 'load-path "~/.emacs.d/site-lisp/yatex")
              (autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
              (setq auto-mode-alist
                    (append '(("\\.tex$" . yatex-mode)
                              ("\\.ltx$" . yatex-mode)
                              ("\\.cls$" . yatex-mode)
                              ("\\.sty$" . yatex-mode)
                              ("\\.clo$" . yatex-mode)
                              ("\\.bbl$" . yatex-mode)) auto-mode-alist))
              (setq YaTeX-inhibit-prefix-letter t)
              (setq YaTeX-kanji-code nil)
              (setq YaTeX-use-LaTeX2e t)
              (setq YaTeX-use-AMS-LaTeX t)
              (setq YaTeX-dvi2-command-ext-alist
                    '(("texworks\\|evince\\|okular\\|zathura\\|qpdfview\\|pdfviewer\\|mupdf\\|xpdf\\|firefox\\|chromium\\|acroread\\|pdfopen" . ".pdf")))
              (setq tex-command "latexmk -pvc")
              (setq bibtex-command (cond ((string-match "uplatex\\|-u" tex-command) "upbibtex")
                                         ((string-match "platex" tex-command) "pbibtex")
                                         ((string-match "lualatex\\|luajitlatex\\|xelatex" tex-command) "bibtexu")
                                         ((string-match "pdflatex\\|latex" tex-command) "bibtex")
                                         (t "pbibtex")))
              (setq makeindex-command (cond ((string-match "uplatex\\|-u" tex-command) "mendex")
                                            ((string-match "platex" tex-command) "mendex")
                                            ((string-match "lualatex\\|luajitlatex\\|xelatex" tex-command) "texindy")
                                            ((string-match "pdflatex\\|latex" tex-command) "makeindex")
                                            (t "mendex")))
              (setq dvi2-command "evince")
              ;(setq dvi2-command "okular --unique")
              ;(setq dvi2-command "zathura -s -x \"emacsclient --no-wait +%{line} %{input}\"")
              ;(setq dvi2-command "qpdfview --unique")
              ;(setq dvi2-command "pdfviewer")
              ;(setq dvi2-command "texworks")
              ;(setq dvi2-command "mupdf")
              ;(setq dvi2-command "firefox -new-window")
              ;(setq dvi2-command "chromium --new-window")
              (setq dviprint-command-format "acroread `echo %s | sed -e \"s/\\.[^.]*$/\\.pdf/\"`")

              (defun evince-forward-search ()
                (interactive)
                (progn
                  (process-kill-without-query
                   (start-process
                    "fwdevince"
                    nil
                    "fwdevince"
                    (expand-file-name
                     (concat (file-name-sans-extension (or YaTeX-parent-file
                                                           (save-excursion
                                                             (YaTeX-visit-main t)
                                                             buffer-file-name)))
                             ".pdf"))
                    (number-to-string (save-restriction
                                        (widen)
                                        (count-lines (point-min) (point))))
                    (buffer-name)))))

              (add-hook 'yatex-mode-hook
                        '(lambda ()
                           (define-key YaTeX-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 (un-urlify file))
                       (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)))))

              (dbus-register-signal
               :session nil "/org/gnome/evince/Window/0"
               "org.gnome.evince.Window" "SyncSource"
               'evince-inverse-search)

              (defun okular-forward-search ()
                (interactive)
                (progn
                  (process-kill-without-query
                   (start-process
                    "okular"
                    nil
                    "okular"
                    "--unique"
                    (concat (expand-file-name
                             (concat (file-name-sans-extension (or YaTeX-parent-file
                                                                   (save-excursion
                                                                     (YaTeX-visit-main t)
                                                                     buffer-file-name)))
                                     ".pdf"))
                            "#src:"
                            (number-to-string (save-restriction
                                                (widen)
                                                (count-lines (point-min) (point))))
                            (buffer-file-name))))))

              (add-hook 'yatex-mode-hook
                        '(lambda ()
                           (define-key YaTeX-mode-map (kbd "C-c o") 'okular-forward-search)))

              (defun qpdfview-forward-search ()
                (interactive)
                (progn
                  (process-kill-without-query
                   (start-process
                    "qpdfview"
                    nil
                    "qpdfview"
                    "--unique"
                    (concat (expand-file-name
                             (concat (file-name-sans-extension (or YaTeX-parent-file
                                                                   (save-excursion
                                                                     (YaTeX-visit-main t)
                                                                     buffer-file-name)))
                                     ".pdf"))
                            "#src:"
                            (buffer-name)
                            ":"
                            (number-to-string (save-restriction
                                                (widen)
                                                (count-lines (point-min) (point))))
                            ":0")))))

              (add-hook 'yatex-mode-hook
                        '(lambda ()
                           (define-key YaTeX-mode-map (kbd "C-c q") 'qpdfview-forward-search)))

              (defun pdfviewer-forward-search ()
                (interactive)
                (progn
                  (process-kill-without-query
                   (start-process
                    "pdfviewer"
                    nil
                    "pdfviewer"
                    (concat "file:"
                            (expand-file-name
                             (concat (file-name-sans-extension (or YaTeX-parent-file
                                                                   (save-excursion
                                                                     (YaTeX-visit-main t)
                                                                     buffer-file-name)))
                                     ".pdf"))
                            "#src:"
                            (number-to-string (save-restriction
                                                (widen)
                                                (count-lines (point-min) (point))))
                            " "
                            (buffer-name))))))

              (add-hook 'yatex-mode-hook
                        '(lambda ()
                           (define-key YaTeX-mode-map (kbd "C-c p") 'pdfviewer-forward-search)))

              (add-hook 'yatex-mode-hook
                        '(lambda ()
                           (auto-fill-mode -1)))

              ;;
              ;; RefTeX with YaTeX
              ;;
              ;(add-hook 'yatex-mode-hook 'turn-on-reftex)
              (add-hook 'yatex-mode-hook
                        '(lambda ()
                           (reftex-mode 1)
                           (define-key reftex-mode-map (concat YaTeX-prefix ">") 'YaTeX-comment-region)
                           (define-key reftex-mode-map (concat YaTeX-prefix "<") 'YaTeX-uncomment-region))) 
              ltxmk22.png
              3.
              TeXファイルを編集しているEmacsで「C-c C-t j」と打てば、「latexmk -pvc *.tex」が実行される

              以上

              このノートに関するQ&A

              このノートに関するQ&Aは、まだありません。

              このノートについて質問する

              このノートについてライターの方に質問できます。

              ※ライターの方から必ず回答をいただけるとは限りません

              ※別ウィンドウで開きます

              ピックアップ

              【iPhone】修理交換の申込方法...
               ※追記※2015/1/30現在iPhone6及び6+が発売されたのを受け、情...
              お尻や足の贅肉にさよなら、「...
              本にできない「正しい」下半身ダイエットなぜ「本にできない...
              知っておきたい無線LANルーター...
              知っておきたい無線LANルーターの知識と選び方iPod touchやPS...
              本文はここまでです このページの先頭へ