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でも入れて遊んでみようかと思います.

    2014年6月11日水曜日

    Lebesgue積分と位相ベクトル空間の勉強ノート 6

    Lebesgue積分と位相ベクトル空間の勉強ノートを更新しました.
    こちらに置いておきます

    追記:2016/10/10 広義積分の項目は杉浦氏の解析入門を参考にしていたのですが、変数変換公式の証明中に体積確定(またはJordan可測)であることを確かめなければならない集合について体積確定かどうか調べていないところがあり、これを証明するには修正点が非常に多くなるので、宮島氏の微分積分学IIの証明を参考に大幅に書き換えをしました。

    追記:2016/07/27 広義積分の項目を追加しました。ルベーグ空間の積分に対するMinkowskiの不等式の証明が中途半端だったので証明のし直しをし、その他にタイプミスを修正しました。複素解析のノートと結合する試みを始めました。上極限と下極限について成り立つ関係式は、複素解析のノートに載せていた証明に不備があったので修正しました。とりあえず今後は初等関数やガンマ関数、ベータ関数を定義して、変数変換の項目を整備するのと、複素線積分をきちんと定義して多変数解析関数の初歩を取り込みたいです。

    追記:2016/05/02 定理の引用番号がおかしくなっていたのを修正しました.

    追記:2016/04/16 定理環境の枠囲みをmdframed.styからtcolobox.styに変更しました.文章中の妙な改ページが無くなっていると思います.

    追記:2016/2/19 読み返してみると何を言っているのか意味不明だったので、柴田氏のルベーグ積分論定理7.3.3(ヘルダーの不等式の逆)に対応するFolland氏のReal Analysis theorem 6.14の証明部分を修正しました。

    追記:2016/01/19 符号付き測度と複素測度、Lebesgueの微分定理の部分を書き直しました。これでほぼ複素数値関数への書き換えが終わったのではないかと思います。変数変換の具体例や原始関数の存在などの話も加えていく予定です。フォントサイズと余白を変更したのでページ数が1000ページ未満に収まっています。

    追記:2014/12/28 索引のリンクがずれまくりなのを修正しました

    追記:2014/10/09 Lebesgue積分のノートを書き直しました.これまでのノートでは,異なる値を取る点が1つでもあれば異なる関数と見なしていたので証明がごちゃごちゃしていましたが,ほとんど至る所等しい関数の同値関係を使うことで,証明が大分すっきりしたと思います.まだ簡素化出来る部分はあると思います.
    無限大に値を取る関数についての記述は極限操作と相性がよいという理由で残してありますが,その極限操作で得られる関数が可測関数になっているという事実をほとんど使っていないので,残す必要もないのかも知れません.
    今回作ったpdfは久しぶりに一部分を印刷をしたので,印刷仕様でハイパーリンクに色がついていません.

    追記:2014/09/24 Trevesの本のHilbert空間の残り部分とLF空間の性質を少し加筆しました.現在は東大の河澄さんのホモロジー論の講義ノートの勉強ノートとLebesgue積分のノートの改訂をしています.Lebesgue積分のノート部分は見直すとかなり無駄な記述が多いので,同値関係「ほとんど至る所で等しい」を早めに導入して記述をもっとすっきりさせる予定です.結果としてFollandのReal Analysisの書き方に寄っていくと思います.柴田さんのLebesgue積分論の内容を複素数値関数に拡張するのは結構面倒なので,Folland本のほうがオススメかな.


    主な変更点は,

    • $L^p$空間の双対空間についての話題を追加
    • Hilbert空間の正規直交系の性質あたりまでの話題を追加
    • 位相空間論の辺りを追記し,ノート全体の整合性を高めた
    • 複素数値関数でも使えるように命題の幾つかを一般化した
    といったところです.Fubiniの定理や微分定理なども複素数値関数に使える形に書き直していかないとな.

    双対空間のところでFollandのReal Analysisでは複素数値関数には適用出来ないと思えるような証明を採用していて,その修正をするのに時間を取られてしまいました(結局Web上で見つかった講義ノートを参考にした).

    また位相ベクトル空間の完備化に関連した直感的には自明に思える細々した命題の証明(2つの位相ベクトル空間$X_1$と$X_2$の完備化$\hat{X}_1$, $\hat{X}_2$の直積空間$\hat{X}_1\times\hat{X}_2$と直積空間$X_1\times X_2$の完備化$\widehat{X_1\times X_2}$の間の自然な同型の存在など)に時間を取られたりしてキツいものがありました.

    柴田氏のルベーグ積分論の定理7.3.3(ヘルダーの不等式の逆)の証明で変な所が見つかりました.この定理は或る性質を持つ可測関数$g$が$g\in L^q$であることを証明する命題であるものの,証明の最初に$g$がその1つ前の命題7.3.2を満たすので云々という点で$g\in L^q$であることを仮定してしまっています.実際は命題7.3.2そのものが必要でなく,その性質を定理7.3.3の証明の中で使っていません.柴田さんの本の種本は上述のFollandの本なので,Follandの本にある命題をそのまま引きずってしまったのだと思われます.Follandの本では上述したように,柴田さんの定理7.3.3に相当する定理を複素数値関数に対して証明してありますが,その証明法は実数値関数にしか使えないと思われるので注意が必要です.柴田さんの本は実数値関数に制限して証明してあるので,命題7.3.2を除けば正しい証明になると思います.
    追記:2016/02/09 やはりFollandの本のTheorem 6.14の証明は正しかったです。

    TrevesのHilbert空間の章も山場は越したのではないかと思います.
    しかしTrevesの本のHilbert空間の章は他の章に比べて雑な印象を受けました.pre-Hilbert空間の閉部分ベクトル空間が完備だと思っているような記述があったり,非可算集合かもしれない集合$S$に関する級数$\sum_{e\in S}$が出てくるものの和の定義をしていなかったりで,ちょっとイラッとします.

    とうとう総ページ数が1000を超えました.
    それを記念して(?),現代数学社から出ている「やさしい線形代数の応用」(仁平政一著)の表紙デザインをパクって表紙をつけてみました.タイトルは適当です.

    解析ばかりで疲れてきたので,昔少し作った代数的トポロジーのノートを整理しようかと考え中です.はやく具体的な対象が扱えるようになりたいな.