LaTeXit を使い iBooks Author で数式を書く

iBooks Author には標準で数式を入力する機能がない.MathTypeというソフトウェアがインストールされていれば挿入メニューに「MathType 数式」という項目が出来て入力することができるが無料ではない.Apple のサポートのiBooks Author: 特殊文字、記号、および数式と方程式を追加する
一方,TeX をエンジンとして数式イメージを簡単に作成できる LaTeXiT でも,iBooks Author に数式を入れることが出来る.LaTeXiT でイメージを生成した後,(ドラッグ&ドロップではなく)コピー&ペーストすることで iBooks Author にインラインで挿入される.

LaTeXiT はサービス機能も用意されているので,テキストフィールドに TeX の命令を書いてそれを選択してサービス経由で処理するという方法もある.

DropBox の Public フォルダに置いたファイルへのリンク.

MathType をインストールすると挿入メニューに「MathType 数式」と表示され,MathTypeのウインドウを閉じることで式が自動的に挿入されるし,挿入した数式をコンテクストメニューから再編集することができる.でもサイズ調整を手動でする必要がある(←まだ試しただけなので知らないだけかも.)

MathType や LaTeXiT で数式を挿入できたとしても,数学や物理の本を一冊を完成させるのは大変な作業.式番号や参考文献などをTeXのように自動で付けることができない.

でも,登場したばかりなので iBooks Author のこれからに期待.


本のような内容が大切なものを作るツールは,WYSIWYG にこだわらないで,マークアップ言語的なものを取り込んでも良かったのではないかと思う.Apple が本気でいいとこ取りを考えてくれたら,使いやすい道具ができただろうに.

YaTeX demo

YaTeX 機能の紹介 youtube

注: キーバインドは [prefix] がデフォルトの C-c (=Ctrlキーを押しながら"c") で、YaTeX-inhibit-prefix-letter が t に設定されている場合。

section型補完

C-c C-s の後ミニバッファのプロンプトから命令の文字列を入力。Tabキーで一覧が表示される。


begin型補完

C-c C-b の後、いくつかの環境名はアルファベットが割り当てられている。
C-c C-b SPC でミニバッファプロンプトから環境名を入力できる。

コマンド変更機能

既に入力した命令を変更(change)する C-c C-c。何の命令かに応じて対応するマクロが呼ばれる。命令を消去(kill)する C-c C-k という機能もある。

自動 label 機能

section型補完で ref (/eqref/figref/tabref) を入力すると参照先のラベル名を自動でつけてくれる。その後、ジャンプ機能 C-c C-g で参照先に移動して変更機能 C-c C-c でラベル名を変更できる。自動で2回タイプセットするのは最近追加された機能(yatex-currentのみ)。

数式記号イメージ補完、ギリシャ文字補完

数式環境中でセミコロン(;)が数式記号イメージ補完、コロン(:)がギリシャ文字補完

latexmkを使ってタイプセット

YaTeXそのものの機能ではないが、latexmkのデモ。refやciteコマンドを追加した場合に必要なコマンドを必要な回数実行してくれる。

修正履歴

  • [2012-1-15] 自動 label 機能のデモを作り直した。
  • [2012-1-18] latexmkを使ったデモを追加

OSX Workshop を導入している Snow Leopard を Lion にアップグレードしたときに日本語 TeX が使えなくなる

追記(8月23日):OSXWS 10.6-1-rc-1 以降は、TeXLive ベースに移行し、以下の対処は必要なくなった。ちなみに、今のOSXWSは10.6 (SnowLeopard)用ではあるけど、一応 10.7 (Lion) にアップグレード後も特に大きな問題はなさそう。

まだ小林さんに確認を取れていないですが、困っている場合はフォントのリンクを張り替えれば動くと思います。

以下を1つ1つsudoをつけて手入力するかシェルスクリプトとして実行して、最後に sudo mktexlsr を実行。

cd /usr/osxws/share/texmf/fonts/opentype
rm Hira*.otf
ln -sf /Library/Fonts/"ヒラギノ角ゴ Pro W3.otf"  HiraKakuPro-W3.otf
ln -sf /Library/Fonts/"ヒラギノ角ゴ Pro W6.otf"  HiraKakuPro-W6.otf
ln -sf /System/Library/Fonts/"ヒラギノ角ゴ ProN W3.otf"  HiraKakuProN-W3.otf
ln -sf /System/Library/Fonts/"ヒラギノ角ゴ ProN W6.otf"  HiraKakuProN-W6.otf
ln -sf /Library/Fonts/"ヒラギノ角ゴ Std W8.otf"  HiraKakuStd-W8.otf
ln -sf /Library/Fonts/"ヒラギノ角ゴ StdN W8.otf"  HiraKakuStdN-W8.otf
ln -sf /Library/Fonts/"ヒラギノ丸ゴ Pro W4.otf"  HiraMaruPro-W4.otf
ln -sf /Library/Fonts/"ヒラギノ丸ゴ ProN W4.otf"  HiraMaruProN-W4.otf
ln -sf /Library/Fonts/"ヒラギノ明朝 Pro W3.otf"  HiraMinPro-W3.otf
ln -sf /Library/Fonts/"ヒラギノ明朝 Pro W6.otf"  HiraMinPro-W6.otf
ln -sf /System/Library/Fonts/"ヒラギノ明朝 ProN W3.otf"  HiraMinProN-W3.otf
ln -sf /System/Library/Fonts/"ヒラギノ明朝 ProN W6.otf"  HiraMinProN-W6.otf

TeX の下付き文字を入力する関数

Emacs の初期設定ファイル( .emacs.d/init.el とか .emacs.el )に書く。

;; _{\mathrm{}} を挿入して括弧の中にカーソルを移動する関数
(defun MyTeX-insert-subscript_rm ()
  (interactive)
  (insert "_{\\mathrm{}}")
  (backward-char 2))
;; YaTeX モードで「Command+"_" 」のショートカットに割当
(add-hook 
 'yatex-mode-hook
 (lambda () (local-set-key [(s _)] 'MyTeX-insert-subscript_rm)))

テキストエディタでマクロを定義する類いの一番素朴なものだけど、実際によく使っている(というか、TeXでローマン体の下付き文字をよく入力する)。

Emacs ユーザーでも、自分で関数を書く人はそれほど多くないかもしれないと思いここに紹介してみた。こういう素朴なものから発展して YaTeX のような事が自由自在にできるようになる。(ちなみに、YaTeX で好きな関数は Ctrl-c Ctrl-c の YaTeX-change-* 。環境名を equation から align に変えたい時とか、括弧のサイズを big から Bigg に変えたい時とか。)

3年前にここに書いていたこれは地味過ぎてそんなに使っていない。次の入力場所を予測してジャンプするもっとちゃんとした関数を書いて、素朴なキーに割り当てられたらもっと使えるかな。

Keynote から PowerPoint ファイルを書き出す時の問題

PowerPoint へ書き出したファイルでスライドの一部が空白になるトラブル。

スライド中の数式などは LaTeXiT を使って作っている。LaTeXiTの書き出しフォーマットが PDF の時、Keynote にドラッグして持ってきたそれらは droppedImage.pdf という埋め込みファイルのオブジェクトになる。これを他のオブジェクトと「グループ」していると、PowerPoint書類として書き出した時に問題が起こるみたい。特に警告も出ず、原因を突き止めるのに少し時間がかかった。

Keynote 5.0.5 と Office 2007 の PowerPoint でこの問題を確認。

Time Machine がホームディレクトリのバックアップをしていなかった

(解決!!→追記)

OSX の中でも特にありがたいバックアップ機能 Time Machine がちゃんと動いていなかった。ホームディレクトリ(ホームフォルダ)を丸ごと無視している(複数アカウントがあり、メインのものだけバックアップされない)。問題なく一時間毎のバックアップが動いていたので、自分のファイルはちゃんとバックアップされているものと思っていたけど、最近一ヶ月はまったくバックアップしていなかったようだ。アラートも出ないし、コンソールでログをみても特に異常はない。もちろん、Time Machine オプションの「これらの項目をバックアップから除外」にないことは確認している。

Time Machine のトラブルで一番最初にみるところはここかな。
http://support.apple.com/kb/HT3275?viewlocale=ja_JP
でも解決しなかった。

以下のトラブルシューティングのサイトの D5 にある a known problem かもしれないけど、再起動しても変わらず。フルリセットをしても変わらず。
http://web.me.com/pondini/Time_Machine/Troubleshooting.html

一度、過去のバックアップを全て消去して、ハードディスクをフォーマットして新しくバックアップをしてみたけど、見事に自分のホームディレクトリだけバックアップしてなかった。

問題に関連しそうな情報

  • 使っているのは現在の最新バージョン:OSX 10.6.7
  • OSは 10.4 から、10.5、10.6 とアップグレードしてきたもの。(2007-11-11
  • ホームディレクトリのアクセス権を変更したことがある。でも元に戻しても動かない。
  • 他のユーザのアクセス権を試しに変更してみたけどバックアップはとれる。
  • 今のホームディレクトリの共有とアクセス権のところは、「自分=読み/書き」「staff=読み出しのみ」「everyone=読み出しのみ」だけど、「カスタムアクセス権が割り当てられています」と表示されている。
  • バックアップがとれなくなった前後にアップルストアジーニアスバーに修理を預けた。

ちょっと困った。

追記:
mdls コマンドでホームディレクトリのメタデータをみると、

com_apple_backup_excludeItem   = "com.apple.backupd"

という属性があった。何がこれを追加したのかわからないけど、以下をターミナルから実行することで、無事にホームディレクトリもバックアップされるようになった。

$ xattr -d com.apple.metadata:com_apple_backup_excludeItem /Users/(アカウント名)

同じようにメタデータに「バックアップから除外」が含まれているファイルを探すには、mdfind コマンドを実行すればいい。(システムのファイルを探すには sudo が必要)

$ mdfind "com_apple_backup_excludeItem = 'com.apple.backupd'"

このようにアラートも出さず、ログにも残らずに、ホームディレクトリのバックアップを取り損ねていたので、Time Machine の信頼性をちょっと疑ったけど、その動作に問題があるわけではなかった。問題は何が com_apple_backup_excludeItem という情報を書き込んだか、ということだろう。とにかく、問題が起こる前に気がついてよかった。

ついでに Time Machine について参考になる記事

YaTeX のタイプセットを Mac のショートカットで(Emacsキーバインドの設定方法)

OSXEmacs を使うと、⌘キーのショートカットがある程度空いているので、よく使う機能のショートカットを割り当てておくと便利かもしれない。最近 YaTeXキーバインドが 「C-c +アルファベット」から「C-c C-アルファベット」を推奨するようになったので、タイプセットなどのいくつかの機能はよりシンプルなショートカットを用意しておくと楽だ。(YaTeXはたくさん命令があるので、体系的に覚えるために標準的なキーバインドを覚えた方がいいと思う。)

  • ⌘-T (or ⌘-B) : タイプセット
  • ⌘-Shift-P:プレビュア起動
  • ⌘-Shift-B : bibtex を実行
  • ⌘-Shift-I : makeindex を実行

Emacs 23 では ⌘キーは super キーになっているみたいなので、設定はこんな感じになる。

(add-hook 
 'yatex-mode-hook
 '(lambda() 
    (require 'yatexprc)
    (local-set-key [(s t)] 'YaTeX-typeset-buffer)
    (local-set-key [(s b)] 'YaTeX-typeset-buffer)
    (local-set-key [(s shift p)] 'YaTeX-preview)
    (local-set-key [(s shift b)] (lambda () (interactive)
			     (YaTeX-call-command-on-file 
			      bibtex-command "*YaTeX-bibtex*" YaTeX-parent-file)))
    (local-set-key [(s shift i)] (lambda () (interactive)
			     (YaTeX-call-command-on-file 
			      makeindex-command "*YaTeX-makeindex*" YaTeX-parent-file)))))

YaTeX-typeset-buffer などの関数はそのまま定義すればいいけど、bibtex を実行するには引数をとる関数を呼ばなければいけないので無名関数を作って割り当てる(らしい)。

(間違いの指摘などよろしくお願いします。)