Sublime Text 3からlatexmk経由でpLaTeXのビルドとプレビュー(Windows版)

表題が長くなったが、内容はこの通り。Windows上でSublime Text 3というエディター(文書編集プログラム)を使い、その中からTeXLive収録のlatexmkというPerlスクリプトを呼び出して、日本語LaTeX(今回はplatex)文書をPDFに組版し、SumatraPDFで結果をプレビューする、というもの。

latexmkには .latexmkrc という環境設定ファイルがあり、それを$HOMEに置いておけば、自動で読みに行くらしいのだが、今回はそれは使わずに、直接にコマンドラインからオプションを渡す方法を試みた。ちなみに前回行ったのは、Sublime Text 3から直接にplatex, dvipdfmx, SumatraPDFを呼び出す単純なもの。latexmkは、bibtexの処理、必要な回数だけのlatex処理など、いろいろ自動でやってくれるらしい。実は、個人的にはあんまり必要としていないんだが、そっち方面は。さらに言えば、Sublime Text 3からlatexmkを起動させるにはLaTeXToolsというプラグインを用いるのが便利で、その使い方がよく紹介されているのだが、そのままでは日本語LaTeXには対応していないので、修正が必要。それもやってみたのだが、別にLaTeXToolsに依存しなくてもできるはずだ、と始めたのが今回の作業。

前置きが長くなった。一番の難関は、latexmkに”-e”オプションでPerlスクリプトを正しく渡すにはどうするか、ということ。ダラー$とか引用符とか、二重引用符とかバックスラッシュとか、どのステップでどういう文字列になって、最終的にどの形でlatexmkに渡されることになるのか、そこが分からなくて、エラー続きだった。結局、つぎのようにすれば上手くいった。

{
	"cmd" : [
		"latexmk", "-cd",
		"-e", "\\$latex = 'platex %O -no-guess-input-enc -kanji=utf8 -interaction=nonstopmode -synctex=1 %S'",
		"-e", "\\$biber = 'biber %O --bblencoding=utf8 -u -U --output_safechars %B'",
		"-e", "\\$bibtex = 'pbibtex %O %B'",
		"-e", "\\$makeindex = 'pmendex %O -o %D %S'",
		"-e", "\\$dvipdf = 'dvipdfmx %O -o %D %S'",
		//"-e", "\\$pdfmode = 3",
		"-e", "\\$pdf_previewer = 'SumatraPDF -reuse-instance %O %S'",
		"-f", "-norc", "-gg", "-pdfdvi", "-pv",
		"$file"
	]
}

ポイントは $latex などのダラー付きの変数に対して、バックスラッシュ(\)を2重に付けるということ。これが分からなくて苦労した。

Sublime Text 3での自前LaTeXビルド(Windows版)

Sublime Text 3にはLaTeXtoolsという強力なパッケージがあるのだが、そのままでは日本語版のplatexでの組版ができない。そこで、いろいろ修正を加えることになるのだが、自分の場合、複雑な処理は必要とせず、単に platex, dvipdfmx, preview すればよいから、もっとシンプルなビルド・システムでよいのだ。むしろ、場合によってはplatexの部分をuplatexに変えたりすることもあるから、その時に応じて適当に選べるようになっていて欲しい。残念ながら、LaTeXtoolsはそうはなっていないようだ。

ということで、あちこち検索しながら試行錯誤。Windowsの場合は、次のようにすれば上手く行った。なお前提として、パスは通してある。また、将来的には Linux, Mac OSX を含めて一つのファイルにしたいので、OS別の処理のため、”windows” : {…} と括ってある。

Tool, buildsystem, new-buildsystemと進むと、untitled.sublime-build なるファイルが作られ、開かれる。そこで、次のように書いて、適当な名前で保存する。今回は、my_platex2pdf.sublime-build とした。

{	
	"windows" : {
		"shell": true,
		"cmd" : [
			"platex", "$file", "-interaction=nonstopmode" ,"&",
			"dvipdfmx", "$file_base_name.dvi", "&",
			"SumatraPDF", "-reuse-instance", "$file_base_name.pdf"
		]
	}
}

Windowsの場合、空白を含むコマンドはダメらしく、上のように、文字列を並べるようにする。それから、複数のコマンド、つまり、platex, dvipdfmx, SumatraPDF を順に起動させるのだが、それらは、”&” で区切るとよいようだ。最後に、これで嵌ったのだが、”shell”: true というのを付けないと、platex のみで、残りが実行されない。どういう訳か分からないが。

WindowsにSublime Text 3をインストール

Macで愛用しているSublime Textだが、Ubuntu, Windows版もあるらしい。まずはWindowsにインストールしてみた。

実はMacで使っているのは、Sublime Text 2というバージョン。同じのにするか新しいのにするか迷ったが、新しい方にした。ベータバージョンみたいだが。また、ポータブル版もあったので、64bitのポータブル版 Sublime Text 3を選びインストール。

インストール直後の作業をメモ。

  • Package Controlを入れる。本家サイトにあるインストール用のコードをコピーする。コンソールを表示させ、コマンドラインに貼り付け、エンターを押して入力。多分、ここが一番心理的ハードルが高い。
  • 日本語をインライン入力できるようにする。Package ControlからInstall Packageを選び、さらに IME Supportというのを選択すればよい。
  • メニューの日本語化。これはなくてもよいが。というか、Macでは英語メニューのまま使っているのだが。Package ControlからInstall Packageと進み、Japanizeを検索。これで、トップメニューが日本語化する。サブメニューも日本語化したい場合は、Sublime Text 3/Data/Packages/Default というフォルダーを作り、その中に、Sublime Text 3/Data/Packages/Japanize フォルダーにある6個の *.jp ファイルをコピーし、さらに、拡張子の .jp を削除する。こうすると、拡張子は .sublime-menu となって有効になる。
  • フォントの設定。Sublime Text 3/Data/Packages/User/Preferences.sublime-settings ファイルを編集する。”font_face”: “SourceHanCodeJP-Regular”, “font_size”: 12, を書き込む。

とりあえず、こんなとこかな。LaTeX用のプラグインはまた後で。

Ubuntu 16.04 LTS に TeXLive 2016 をインストール

[メモ]

GUIを使いたかったので、準備として perl-tk をインストール。DVDイメージのダウンロードとネットインストールが選べるが、ネットインストールにした。

TeXLiveのホームページから、install-tl-unix.tar.gz をダウンロードして解凍。install-tl-20160730 なるフォルダーができるので、ターミナルで中に入り、install-tl なるPerlスクリプトを起動する。最初、perl ./install-tl -gui としたのだが、TEXDIR が書き込めないという表示が出た。デフォルトの設定だと、/usr/local/texlive/2016 になっている。デフォルトのままで行きたかったので、sudo perl ./install-tl -gui としたところ、書き込めない表示も出ずに、あとはデフォルトの設定のままメニュー通りに進んで、無事に完了。

PATHの設定まではしてくれないようで、which latex としても何も出ず。ううむ。どの設定ファイルに書き込むべきか、いつも悩むのだが、隠しファイルの(表示メニューからわざわざ表示するとしないと、表示されないようになっていた。Mac OSX と同じですな) .profile を編集する。末尾に、PATH=/usr/local/texlive/2016/bin/x86_64-linux:$PATH を書き込んで、一旦ログアウト。これでパスが通った。

LaTeX エラー:Runaway argument? File ended while scanning use of \@writefile.

昨日の朝,LaTeX Beamer でプロジェクター用の資料を作っていたときのこと。奇っ怪なエラーに遭遇した。

Runaway argument?
{\headcommand {\beamer@framepages {62} 
! File ended while scanning use of \@writefile.
 
                \par 
l.130 \begin{document}

未定義マクロのためエラーが出て,修正して再コンパイルしたところ,上記のエラーメッセージ。文法的にはエラーはもうないはずなのに。それに,\@writefile とは一体?

発表を数時間後にひかえていたので,焦りまくった。数分後,ふと気がついて補助ファイルをすべて削除したら,エラーはなくなった。つまり,hoge.tex をコンパイルすると,hoge.aux とかが生成されるのだが,これが変になっているために,再コンパイルのときにエラーが出るという仕組みであった。

しかし,エラーのたびにターミナルあるいは,ファインダーから削除するのは面倒である。エディターのTeXShopに,補助ファイルを削除する,というメニューがあれば良いのになあ・・・と思ってあちこち見たら,あった。メニューの編集のところに「作業ファイルを削除する」という項目があったのだ。

Ubuntu 13.04 にインストールしたものメモ(1)

[備忘録]
以前、Ubuntuを使っていたときは、8.04とかそんな頃だったと思う。あちこち変わっているので、自分の為にメモ。

開発関係のプログラムをインストールするために、Synaptic Package Manager を使おうと思ったのだが、見当たらない。UbuntuソフトウェアセンターというMac App Storeみたいなものが入っていて、一般的なアプリはここからインストール出来るようになっている。そこで、まずは、Synaptic Package Manager を探してインストール。次に、Cairo-Dockをインストール。これはMacライクなドックを提供するもの。デフォルトのドックが画面左端にあるのだが、あまり使い易くない。これだったら、以前のメニュー形式の方がましだったなあと。ということで、Cairo-Dockなのであるが、OpenGLをオンにすると挙動が少しおかしい気がする。OpenGLはオフにして使うことにした。特に反応が遅いということもないし。

それから、定番のTeX 一式をTeX Liveで入れる。2012版だけど。Dropboxはちょっと迷ったのだが、TeX入れるのであれば、仕事するかもだから。EvernoteはUbuntu Software Center で探した限りではなかった。あと、チェスプログラムとか適当に。

  • Synaptic Package Manager (グラフィカルなパッケージ管理ツール)
  • GLX-Dock(Cairo-Dock with OpenGL)
  • TeX Live 2012
  • Dropbox
  • PyChess (チェス・プログラム)
  • Shutter (スクリーンショットを撮るアプリ)

ソフトウェアセンターを終了させて、Synapticを起動する。ここから以下をインストール。

  • build-essential (GNU C コンパイラーを始めとする基本ツール類。これがないと始まらない。)
  • opencv関係 (python-opencvを含めて)
  • asymptote (MetaPostを拡張した描画ソフト)
  • nkf (ネットワーク漢字コード変換フィルター)
  • p7zip (=7zip) (7-zip アーカイバーのUNIXコマンドラインへの移植版)

とりあえず今回はこんなところ。

asymptoteで日本語TrueTypeフォントを使う

asymptoteでセプテンバーフォントを使おうとしたら,フォントが見つからないというエラーに遭遇した。あれこれ調べて,とりあえず解決したので,忘れないうちにメモ。

ログを見ると,latexはちゃんとdviファイルを生成している。これをdvipsが処理するのだが,ここで引っかかっていた。自分の環境では,問題点は2つあった。1つはdvipsが使うmapファイルで,もう1つはdvipsから呼び出されたGhostscriptがフォントを認識できないということ。

1つ目は,これは多分,自分だけの問題。TeX Live とかのパッケージじゃなくて,自分でちまちまビルドしてきたので,あちこち整合性が取れてなかったりしている可能性がある。特に,updmapあたりは以前にも問題生じたことあったし。今回,そこいらを一掃すべく,updmap (-sys) で生成された既存のmapファイルをすべて消去し,あらたに updmap-sys の方でmapを生成。それから,upTeX用のセプテンバーフォントの設定を,

r_up-sept-m-jis  UniJIS-UTF16-H  SeptM.ttf

とした。今まで

r_up-sept-m-jis  UniJIS-UTF16-H  :0:SeptM.ttf

としていたのだが,どうも :0: のせいで,dvips用Mapが生成されていなかった模様。

2つ目は,Ghostscriptがフォントを見つけられないという問題。使っているgsのバージョンは7.07.1なのであるが,どういう経緯でインストールしたものなのか記憶がない(汗)という状態。とりあえず,/usr/local/bin/ にgsはあり,設定ファイルなどは,/usr/local/share/ghostscript/7.07/lib/ 以下にあるようだった。ここに,CIDFnmapなるファイルがあって,ここに記載されているCIDフォントをgsは認識できる仕組みらしかった。

CIDFnmapをエディターで開いてみると,

(CIDFnmap.OSX) .runlibfile 

というような記述があり,ここから更に CIDFnmap.OSX を読んでいた。そこで,この CIDFnmap.OSX を開いてみると,次のような感じでフォントを読み込む設定が書かれている。

% Adobe-Japan1
%
%/MS-Gothic              (/usr/local/share/ghostscript/Resource/CIDFont/msgothic.ttf)        ;
%/MS-PGothic             (/usr/local/share/ghostscript/Resource/CIDFont/mspgothic.ttf)       ;
%/MS-Mincho              (/usr/local/share/ghostscript/Resource/CIDFont/msmincho.ttf)        ;
%/MS-PMincho             (/usr/local/share/ghostscript/Resource/CIDFont/mspmincho.ttf)       ;
/HiraKakuPro-W3         (/usr/local/share/ghostscript/Resource/CIDFont/HiraKakuPro-W3.otf)  ;
/HiraKakuPro-W6         (/usr/local/share/ghostscript/Resource/CIDFont/HiraKakuPro-W6.otf)  ;
/HiraKakuStd-W8         (/usr/local/share/ghostscript/Resource/CIDFont/HiraKakuStd-W8.otf)  ;
/HiraMaruPro-W4         (/usr/local/share/ghostscript/Resource/CIDFont/HiraMaruPro-W4.otf)  ;
/HiraMinPro-W3          (/usr/local/share/ghostscript/Resource/CIDFont/HiraMinPro-W3.otf)   ;
/HiraMinPro-W6          (/usr/local/share/ghostscript/Resource/CIDFont/HiraMinPro-W6.otf)   ;

ここで,行の先頭が%のものは,TeXと同様にコメントアウトされている。そのフォントを使いたい場合はコメントアウトをはずせばよいということだろう。そこで,ここにセプテンバーフォントの実体ファイルへの絶対パスを書き込んでみた。

/SeptM            (/Users/hoge/mytexhome/texmf/fonts/truetype/tashotai/SeptM.ttf)     ;

以上で設定は終了。これで,ちゃんとasymptoteからも,というかghostscriptでセプテンバーフォントが使えるようになった。分かってみると実は簡単なことであったが,なんだかんだで数時間を費やしてしまった。

9月10日(月曜日)

  • このところ日記を書かなくなっているが、タイトルが決まらない、というのが理由の1つだったりする。そこで、特にタイトルがないなあというときは、日付をタイトルにして、ともかく何か書くことにする。
  • 理想的には、twitterまとめ、みたいに、時系列でその日に何かしらメモったこと、書いたことが、ログとして残れば良いのだが。そういうツール、つまり、ブログ内ツイート、みたいなものは無いだろうか。いや、あるにはあるのだ。WordPressのプラグインで、twitter toolsみたいなものはある。しかし、それでは、まず twitter にtweetしてしまう。それはしたくないよ、というケースも多いのだ。
  • 暫定的だが、その都度、日記に書き足していくことにする。ホントは、時刻が自動的に付加されたり、リスト形式のレイアウトになる方が良いのだが、面倒だと長続きしないので。
  • TeX関係で、メモ。以前から、PDF以外の画像ファイル(jpegとかpngとか)を取り込めないでいた。昨日、やっと解決した。colorパッケージにも dvipdfm オプションを付けないといけないようだった。つまり、次のようにする。
    \usepackage[dvipdfm]{graphicx}
    \usepackage[dvipdfm]{color}
    これで、ちゃんと読み込まれる。

LaTeXで連立方程式に自由に式番号をつける

LaTeXで連立方程式を書くとき,不便だなと感じることがある。それは,それぞれの式に式番号を付けるのが存外と難しいことである。もちろん,式全体を左側から\lbrace で囲まなくてよい,ということであれば簡単なのだが。

以前は,cases.sty や mutlieq.sty というパッケージを使っていたが,これだと式番号が連番になってしまい,独自のタグを付けることができない。つまり,

\begin{multieq}{}
  f(x,y)=0 \tag{a} \\
  g(x,y)=0 \tag{b}
\end{multieq}

のように書けないのだ。ここに \tag は使えません,というエラーメッセージが出る。

そこで,あちこち探して見つけたのが,empheq.sty というパッケージ。empheq 以外のファイルも必要みたいなので,リンク先にある zip アーカイブをダウンロードしてフォルダーにあるすべてのファイルを取得する。

styファイルがないので,dtxファイルから生成する。ターミナルを起動して, tex empheq.dtx とすればよい。

使い方としては,

\begin{empheq}[left=\empheqlbrace]{align}
  & f(x,y)=0 \tag{a} \\
  & g(x,y)=0 \tag{b}
\end{empheq}

などとすればよい。付属の解説書によれば,式全体を枠で囲んだり,いろんなことが出来るようだ。

MathJaxを試してみる

MathJaxが良くなっているらしいということで、ちょっこし試してみた。mimetexと同じく、LaTeXで表記すればよい。
\$\sqrt{2}\$ と書けば、$\sqrt{2}$となるし、
\$p=x^2+y^2 \Longleftrightarrow p\equiv 1 \pmod{4}\$ と書けば、
$p=x^2+y^2 \Longleftrightarrow p\equiv 1 \pmod{4}$

ディスプレイ数式も、この通り。
\[ \Gamma(s)=\int_{0}^{\infty} e^{-x}x^{s-1}\,dx \]

数式の画像をリアルタイムで作っているようなので、表示されるまで、ややもたつきが見られるが、mimetexと比べても、格段に美しい!LaTeXRenderに匹敵すると思う。これを javascript で実現しているとは驚きであるなあ。

ということで、これからはMathJaxで数式を書こうと思う。以下、簡単に導入メモ。

MathJaxのサイトから一式をDLして解凍したのち、自分のサイトにアップ。ファイルの個数が多いのでUploadには時間が掛かる。サーバー上で解凍できるならその方がベターかなあ。次に、MathJaxをWordPressで使う為のプラグイン、MathJax-LaTeXをダウンロードする。これをWordPressのpluginフォルダーにアップしてプラグインを有効化する。

プラグインの設定では、MathJaxをアップしたディレクトリーを指定する。あとはそのままでも良いのだが、ワタシの場合、\$…\$ でインライン数式を書きたいので、少し変更。default.js というファイルを開き、tex2jax の部分で、コメントアウトされているところを外す。何故か、[‘\$’,’\$’] がコメントアウトされているので、そのままではダラーで囲んだところが組版されないのだ。個人的な不満はここだけだった。ここを修正して default.js を選べば、設定は完了。