2014年6月28日土曜日

MacとUbuntuでのLaTeX実行速度の違い

私が所有しているMacBook Air mid2012はCPUをcore i7のものに変え,メモリは8G積んでいます.Mac上ではMacTeX 2014, 外付けSSD上のUbuntu 14.04上ではTexLive 2014をインストールして,MacではEmacs 24.4.50上のYaTeXから,Ubuntu上ではEmacs 24.3上のYaTeX上からタイプセットを行っています.

Lebesgue積分と関数解析のノートを作っているのですが,ノートが肥大化するにつれてMac上のplatex+dvipdfmxの速度が気になるようになってきました.そこでいま1000ページちょっとあるファイルのタイプセット時間を測ってみると,Macでは118秒, Ubuntuでは35秒と大きな差が出ました.Warningがたくさんでるため,その表示に時間がかかっているのもあるかと思いますが,特にdvipdfmxの実行時間に大きな差があるようです.それにしてもなぜこんなに処理時間が違ってくるのでしょうか.TeXLiveのインストール時間なども,Ubuntuのほうが体感的に速いような気がするのですが,ファイルシステムの違いが大きいのかもしれません.

Ubuntuのターミナル上で「platex --shell-restricted -synctex=1」でタイプセットすると31.2秒, dvipdfmxの処理時間は2.2秒ほどでした.

MacではEmacsでのRefTeXの動作も遅い気がします.Macではラベルのスキャンに要する時間が遅くイライラが募りますが,Ubuntu上のEmacsでは一瞬で終わりストレスがありません.これはMacの方はEmacs 24.4の開発版を使っているのも関係しているのでしょうか.

こんな感じなので,最近はLaTeX文書を書くときにはもっぱら外付けSSDにインストールしたUbuntuを使っています.

追記:2014/07/711:mdframed.styでtikzを使っているのが原因でタイプセットがかなり遅くなっていました.tikzを使わない形式に戻した所,あるファイル(B5のpdfで150ページほど)のタイプセット(YaTeXでplatex+dvipdfmx)はMac上では13〜14秒かかっていたものが7秒弱に,外付けSSD上のUbuntuでは6〜7秒ほどかかっていたものが3秒に,ほぼ倍速になりました.Mac上でもストレスが大分軽減されるようになりましたが,それでもUbuntuのほうが倍速です.

2014年6月20日金曜日

Ubuntu 14.04でのEmacsの設定(mozc, YaTeX, SyncTeX, フルスクリーン)

最近MacBook Air (mid 2012)の外付けSSDにUbuntu 14.04をインストールしたので,久しぶりに設定をゴニョゴニョしております.

Emacsの日本語入力では,以前はAnthyを使っていましたが,TeXフォーラムの「emacs, mozc, TeX入力」を見て,mozcでもドル記号を入力したときに自動で直接入力に切り替えることが出来そうだったので設定をしてみました.「~/.emacs.d/init.el」に次のように設定しています.
;;; 言語環境の指定
;;mozcの設定
(require 'mozc)
(set-language-environment "Japanese")
(setq default-input-method "japanese-mozc")

;;ドル記号を入力したときに直接入力に切り替える。
(define-key mozc-mode-map "$" 'YaTeX-insert-dollar-or-mozc-insert)
(defun YaTeX-insert-dollar-or-mozc-insert ()
  (interactive)
  (if (eq major-mode 'yatex-mode)
      (YaTeX-insert-dollar)
    (mozc-insert)))

その他にも,SyncTeXの設定がしばらく見ない間に変わっていたので,TeXWikiを参考に設定も行いました.
synctex-for-evince-yatex.el」をダウンロードしてemacsが読める場所に置きます.
init.elには次のように書き込んでおきます.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; synctex関連
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;inverse 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)



;;forward-serach

  (require 'synctex-for-evince-yatex)
  (synctex-for-evince-dbus-initialize)
  (add-hook 'yatex-mode-hook
            '(lambda ()
               (YaTeX-define-key "f" 'synctex-for-evince-yatex-forward-search)))
これでUbuntuでも快適にLaTeX生活を送れるようになりました.

追記:2014/06/23: フルスクリーンの設定を書くのを忘れていました.
以下のように記述しておけば,F11キーでフルスクリーンモードに移れます.
;;フルスクリーンモード
(defun toggle-fullscreen ()
  "Toggle full screen on X11"
  (interactive)
  (when (eq window-system 'x)
    (set-frame-parameter
     nil 'fullscreen
     (when (not (frame-parameter nil 'fullscreen)) 'fullboth))))

(global-set-key [f11] 'toggle-fullscreen)

複数の文書で共通して使いたい文書の置き場所(LaTeX)

LaTeXでLebesgue積分のノートと複素解析のノート,Lie群のノートを作成しているのですが,実数関数についての微積分の内容をすべてのノートに共通させたいと以前から考えていました.

サブフォルダに置いてある文章ならば,import.styを使って読み込むことも可能ですが,同水準のフォルダ間の文章の読み込みは望みの挙動をしてくれる解決策を知りませんでした.
import.styを使うと,サブディレクトリ以外の他ディレクトリのファイルも読み込むことが可能なようです.しかし私が試した限りでは,警告やエラーが出ないものの,期待したファイルを読み込んでいない結果が得られました.またimport.styを使うと,YaTeX側で認識をしてくれないという問題があります(個人的にはこれが一番の問題).


仮に共有したい微積分のノートが「$HOME/notes/calculus」に置いてあるとします.

  • \inputコマンドを使うのであれば,これは相対パスを理解してくれるようなので,\input{../calculus/integral}といった記述をしても問題なくタイプセットを行うことが可能です.

しかし\includeコマンドを使おうと思うと,相対パス表記はLaTeX側で解釈してもらえないようで,エラーが出てしまいます.大規模の文章を扱うときには,\includeonlyコマンドを使って分割タイプセットを行いたいので,\inputしか使えないのは不満が残ります.

  • 別の解決策として1つのPC(OS)しか使わないのであれば,共通させたい文書を入れるフォルダを作って,その他の各文書のフォルダにはシンボリックリンクを貼っておけば良さそうです.
しかしこれにも問題点があって,私はLaTeXのノートをDropboxに保存して複数のPCで共有しているのですが,シンボリックリンクを使った方法だとDropbox上で実ファイルとして認識されてしまうようで,他のPCでは実ファイル化してしまい余計に扱いがややこしくなりました.

現在はMacやLinuxの環境では
  • ~/.bashrcなどに変数TEXINPUTSを
    export TEXINPUTS=$HOME/notes/calculus:$TEXINPUTS
    と記述してTeX側から共有したいファイルの場所が見えるようにする.
という解決策に落ち着きそうです.この方法だと,\include{integral}といった形で読みこめばよく,また\includeonlyコマンドも用いることができます.多くのディレクトリを追加すると,同じファイル名のものがあるときにかなりまずいことが起こりそうな予感がするので,ファイル名には慎重になる必要がありそうです.

YaTeXでincludeonlyの自動補完機能を使うとフルパスを記述されてしまうので,その点がなんとかならないかなとは思いますが,大分やりたいことに近づいたと思います.


2014/06/28:追記: TEXINPUTSを書き換える方法では,上記のように書き換えた場合,$HOME/notes/calculus内にauxファイルがあると,mainファイルに作成されたauxファイルよりもそちらを先に読みにいってしまうため,目次や式番号などが正しく作成されません.共有する文書を入れたディレクトリ内からはauxファイルを削除しておくようにしましょう.

他にも色々な解決法があるようです.
のあたりが参考になります.
\let\include=\inputとするものや,texmf.cnfの中のopenout_any, openin_anyという変数をa (any)にするものもありました.後者はカレントディレクトリの上位ディレクトリの読み書きを許すことになるので,セキュリティー上よろしくないようです.野良TeXファイルをタイプセットしないのであればこれでよいのかも.

    Ubuntu 14.04をMacBook Airの外付けSSDにインストール

    久しぶりにブログタイトルに則した内容です.

    私はMacBook Air (Mid 2012)をメイン機として利用しており,先日TranscendのJetDrive 520を購入してSSDを480GBのものに換装し,純正のSSD(250GB)が余ったので久しぶりにUbuntuをインストールしてみました.

    以前にも外付けHDDにUbuntuインストールしたことがあったのですが,USB 2.0接続のものだったため動作が緩慢で,Lubuntuに入れ替えてようやく耐えられるような状況だったのと,いつのまにか起動できなくなってしまったこともあり,その後試していませんでした.

    今回インストールしたのはUbuntu 14.04 Desktop Japanese Remixです.以前にUbuntuを外付けHDDにインストールしたときに,日本語入力のibusが非常に使いにくくなっており,Fcitxをインストールして設定したのですが,Japanese RemixバージョンではFcitxを採用していてそのあたりの調整を行わなくてよさそうだったため選んでみました.

    インストールの手順はほぼkanzメモさんの「Mac+外付けHDDにUbuntu 13.04をインストール」の記事の通りに行いました.

    以下では,外付けSSDは/dev/sdbとして認識されているものとします.

    他の人の記事ではBoot用パーティションを分けないでインストールしているものも多く,最初は私もブートローダをインストールするデバイスとして外付けSSD(/dev/sdb)を指定してインストールしてみました.最初はきちんと起動したのですが,カーネルのアップデートをしたのが原因なのか,すぐに起動できなくなりました.これまではこの点で何度も失敗していたように思います.

    ですので,上記の記事を元に再インストールを試みました.

    さて,私が最初に外付けSSDにUbuntuをインストールしようとした際には,上記記事のEFI領域を作成していなかったものの,インストール後のパーティションをみるとEFI領域が作成されていました.最初のインストールでブートローダを/dev/sbdにインストールしたのが原因かと思います.このEFI領域はUbuntuの再インストールの際に使わないように設定を行ったので,もし作成されていないのであれば作る必要はないと思います.ということで,パーティションは

    • rEFInd用(HFS+)  1GiB (32MiBで十分だそうですが,OSをMavericksにしてから,ディスクユーティリティからは小さなパーティションが作成できなくなった(?)ようでした)
    • Boot用パーティション (Fat32) 100MiB
    • Ubuntuインストール用パーティション(ext4) 50GiB
     のように分割しました.SSDの残り部分はFat32のデータ保存用パーティションにしました.ここで,(HFS+)はMac用のパーティションであり,Ubuntuのインストールディスクに付属しているパーティションエディタ「gparted」では作成できなかったので,Macのディスクユーティリティから作成しました.OSX Lionのときには小さなパーティションが作成できていたのですが,Mavericksでは小さなサイズのパーティションが作成できず,かなり無駄ができてるのが気にかかります.残りのパーティションはgpartedで作成しました.

    後の手順は上記の記事に従って行いました.今度はカーネルのアップグレードを行ってもきちんと起動しています.

    Ubuntu 14.04では発熱量がMavericksに比べてかなり大きいようで,電源をつないでいないとバッテリーがすぐに尽きてしまいそうです.

    Emacs24.3やTeXLive 2014をインストールして使ってみましたが,SSDの読み書きの速度が内蔵SSD並であるためか,Mavericksに比べて挙動が爆速です.pdfで230ページほどの文書をYaTeXからplatex+dvipdfmxでタイプセットしてみたところ,Mavericksでは14秒ほどかかっていたのが,外付けSSD上のUbuntuでは8秒でした.

    あまりに快適なので,VMware Fusion 6の試用品をインストールしてこちらにもUbuntuを入れてみたところ,同じファイルをタイプセットすると10秒で済みました.LaTeXを使うのならやっぱりLinuxがよいのかな.VMware Fusionに入れたUbuntuは,Emacs上でアンダースコアとバックスラッシュの設定の仕方がよくわからないため,使わなくなりそうです.一時勢いで購入しかけましたが買わなくてよかった….

    2014年6月14日土曜日

    TranscendのMacBook用SSD交換キットJetDrive 520を購入

    AppleのWWDC 2014では新しいハードウェアの発表がありませんでした.
    もし新しいMacBook Airが発表されたら購入を考えようかと思っていたのですが,肩透かしを食らった状態になりました.

    現在MacBook Air (mid 2012)を所有しているのですが,内蔵SSD(256GB)の容量が気になりだしていたので,Transcendから最近発売されたMacBook Air用のSSDアップグレードキットであるJetDrive 520の480GBタイプを購入してみました.
    純正のSSDは512GBで7万円くらいが相場のようでとても手を出せないでいたのですが,こちらはAmazonで4万円となっておりかなり求め易くなっています.

    換装に必要なデータコピー用のケーブルや精密ドライバーも付属していて,他に何かを用意する必要のない親切なキットです.またUSB3.0対応の外付けアルミケースも付属しており,交換した後のSSDを入れて外付けドライブとして再利用出来るのも嬉しい点です.

    換装はTranscedのサイトで見られる動画を見ながら行えば非常に簡単でした.ちょっと迷ったことは,ネジが右ネジなので外すときに左にまわすのですが,あまり力を入れすぎるとネジ穴を潰してしまいそうなのでどちらにまわしてよいのか最初は不安になりました.

    Blackmagic Disc Speed Testを使って読み込み,書き込みのスピードテストをしてみました.

    まずは交換前の純正SSDです.Write 402.4MB/s, Read 448.2MB/sでした.購入の際に参考にしたmakkyon webさんの記事「MacBook Air (Mid 2012) のSSDをJetDrive 520に交換!驚きのベンチマーク結果は…」ではWriteが250MB/sくらいのようなので,元々かなり速い部類だったようです.


    次は換装後のテストです.Write 435.8MB/s, Read 493.0MB/sとなり,どちらも1割ほど増加しています.すげー.


    最後は取り外した純正SSDを外付けケースに入れたもののテストです.Write 359.2MB/s, Read 396.8MB/sで,書き込みも読み込みも内蔵の場合よりも1割くらい減っていますが,それでも現在使っているバックアップ用のUSB3.0接続の2TBのHDDが書き込み,読み込みとも150MB/sほどであるのに比べると驚異的です.

    交換したJetDriveの容量は現在479.24GBと認識されています.これで残りの容量を気にすることなく音楽CDの取り込みなどが出来るようになりました.

    外付けのアルミケースは質感もよく,小さくて持ち運びもし易そうです.外付けのSSDにはLinuxでも入れて遊んでみようかと思います.