MacBook Pro 設定メモ(5) エディター

エディターがないと始まらない。とりあえず、Emacs, Sublime Text 3, Atom, Visual Studio Code, Bracket あたり。Emacsはいろんなバージョンがあって、ちょっと悩ましいので、後ほど。問題ないところで、普段から使っているSublime Text 3を入れる。

Sublime Text 3 のサイトから、最新版の Sublime Text Build 3211.dmg をダウンロード。dmgを開いて、Sublime Text.app を /Application に移動。起動させたら、何をおいても、Package ControlをInstallしなくてはならない。確か以前は、謎の呪文をどこぞからコピーしてきて、コンソールにコピーして・・・という手順だったと思うが、最新版では、メニューのToolsの一番下に、Install Package Control という項目があり、簡単にインストールできるようになっていた。(ちなみに、インストールが完了すると、この項目はToolsから消滅していた。) いろんなプラグインがあるが、それはまたいずれ。

Sublime Text 3 だけだと、utf8以外のファイルが読めないので、ミミカキエディット(mi)もダウンロードしておく。最新の3.0.4r1 というのが、Catalinaに対応しているバージョン。Windows使っている人は、いまだにShift-JISを使っている人が居るので、miがあると安心。

Sublime Text 3でのAsymptote Syntax Highlighting 改訂版

ちょっと要領が分かってきたので,Emacs版のAsymptote Syntax Highlighting に近づけるように改訂版を作ってみた。

ATOM版のSyntaxの元になっているのは,asy -l > asy.list で生成される asy.list というファイル。これに,変数やら関数やらの一覧が載っている。ところで,Asymptoteをビルドするための本家の一式を見ると,Makefileに,次のような箇所がある。

asy-keywords.el: asy
        @echo Creating $@;
        $(ASY) -l > asy.list
        ls $(addsuffix /*.asy,$(KEYWORDS)) | grep -v plain\* | \
          grep -v three_\* | grep -v featpost3D | xargs $(ASY) -l >> asy.list
        perl ./asy-list.pl asy.list 2.09svn

これを見ると,asy -l で生成された asy.list にさらに幾つかのキーワードが追加されているようだ。そして,こうして出来た asy.list を用いて,Emacs用の keywords.el が作られている。そこで,ATOM版の作成スクリプトに変更を加えて,増補されたasy.listを使って,Asymptote.csonを生成するようにした。あとは前回と同様にして,JSONに変換したのち,JSON-tmLanguage にして,最終的に tmLanguage に変換した。そのままだと,syntaxファイルとして認識できない箇所があったので,real[]といった[]を含む箇所をコメントアウトするなり,適当に手を加えた。出来上がりはまずまずだと思う。

Sublime Text 3でAsymptoteのsyntax highlight表示

最近,AtomやらBracketsやらVisual Studio Codeやら,新しいエディター(文書編集プログラム)を使っているのだが,やはり Sublime Text 3の軽快さにはかなわない。ということで,LaTeX文書に関しては,Sublime Text 3に戻ってきたのだが,図版作成プログラムのAsymptoteについては,以前と変わらず Emacs を使っているのだった。

Emacsを使う理由は Syntax Highlight ができるから。あと,C-c C-cでビルド&プレビューが出来るし。ビルドの方は,Sublime Text 3でも自前ビルドシステムを作れば簡単なのだが,シンタックス・ハイライトできるパッケージが見つからなかった。

いろいろ調べてみると,ATOM用のAsymptoteパッケージが見つかった。これに,シンタックス・ハイライト用のデータが付いているので,これを移植できないかと考えた。試行錯誤したが,以下の方法で,とりあえず出来た。

まず,ATOM用Asymptoteパッケージ付属のasymptote.csonというファイルをJSON形式に変換する。これはATOMにCSON-parserというパッケージを入れることで出来た。ファイルの先頭に無駄な{}が付いていたので,これを手動で削除。以上で,asymptote.JSONが出来た。

次に,Sublime Text 3にPackageDevというパッケージをインストールする。それを用いて,JSON形式のTextMate Languageファイルを新規に作る。パッケージ・コントロールから選んで行って,New Langauage Syntax (JSON-TextMate) 的な表示のものを選ぶと,雛形が作成される。それをasymptote.JSON-tmLanguage という名前で保存する。

pattern:[] の中身が空っぽなので,そこに,先に変換して作ったasymptote.JSONのpattern:[…] の中身をコピーする。インデントが2文字になるように調整。これは必要か分からないが。言語の名前と拡張子をそれぞれ Asymptote, asy として保存。

これをTextMateの言語ファイル形式に変換する。Build SystemをConvert to … にして,Build with … から Convert to Property List を選択。すると,なんとエラー。25行目あたりで,Expected Dictionary というエラー。このブロックだけ,begin, beginCaptures などという語句がある。そこで,このブロックをコメント・アウトして,再び Convert to Property List する。今度はエラーもなく,asymptote.tmLanguage というファイルが出来上がった。拡張子がxmlでないのが不思議だったが,どうやら,PackageDevが作ったJSON-tmLanguageの1行目がshebang的になっているようだ。コメントなのだが,
// [PackageDev] target_format: plist, ext: tmLanguage
と書いてある。これを読んで,plistに変換し,拡張子を tmLanguage にしているらしい。

以上で,asymptote.tmLanguage が完成した。これを,Package/User/ に移動して,Sublime Text 3を再起動すると,SyntaxにAsymptoteが表示されていて,拡張子 asy のファイルは自動的に,syntax highlight される。

これで,一応の目的は果たした。しかし,比較してみると,Emacsの表示の方が,まだ完成度が高いようだ。Emacsではgeometryで定義された line型なども,ちゃんと予約語として表示されるが,ATOMのAsymptoteだと line はただの変数と同じ。ということで,完全に満足はできないのだが,まずまずではある。

Atomに移行中

LaTeX用のエディターは,ずっとTeXShopを使っていたのだが,Code foldingができない,アウトライン(sectionなどの構造表示)ができない,ファイルをたくさん開くと動作が重い,などなど,不満が出てきて,代替案を探していた。しばらくは Sublime Text 3 を使っていた。幾つかのPackageを入れることで,まずまず満足できる環境にはなっているのだが,先日Atomをインストールしたところ,ずっと簡単にLaTeX環境が作れて,おまけに,パッケージの設定も(Sublime Textが直接設定ファイルを修正するのと比べて)初心者でも安心して出来る形式になっている。余計な装飾やアイコンなどがないため,画面も広く使えるし,ファイルブラウザーの表示・非表示も簡単,アウトラインも出る,コード・フォールディングも出来る,と良いことずくめ。

ということで,Atomに移行しようかと思う。設定などのメモはまたいずれ。

TeXLive2016に移行完了

[備忘録]
TeXシステムを最新のTeXLive2016に移行した。一応前のシステムも残してあるが、新しい文書はTeXLive2016の方で書くことにした。以下、メモ。

  • TeXLive2016の実行ファイルのパスを /usr/texbin というシンボリック・リンクにして、これを使うことにした。起動時にパスを通すために、これを .profile に追加するのが普通だが、そうしなくても使えている(理由はあとで)ので、以前のシステムを使うためにも、さしあたってはパスは以前のまま。
  • TeXLive2016付属のasymptoteのバージョンは2.38なのだが、古いgsをサポートしていない。そこで、バージョン9.20のgsをHomebrewで入れて、こちらにパスを通すようにした。困ったことに、以前のシステムのasymptote 2.18はgs9.20では使えない。だから、以前のシステムでasymptoteを使うときは、古いgsにパスを通す必要がある。asymptoteだけは完全に新しい方に移行するというのが現実的かもしれない。
  • TeX用のエディターとして Sublime Text 3 を使い始めた。LaTeXToolsを入れ、自前のビルドシステムを準備した。自前のビルドの際に、/usr/texbin にパスを通してプログラムを呼び出すようにしているので、起動時にパスを通しておかなくても動くようにはなっている。
  • LaTeXToolsのビルドシステムを使えば、サブファイルの1行目に、
    %!TeX root = main_file.tex
    

    とメイン・ファイルを指定できるらしいが(ちなみに、これはTeXShopでも可能)、自前ビルドだと、これが使えない。ちょっとのことだが、けっこうイライラするので、なんとかしたい。

  • dvipdfmx まわりが随分と変わったらしく、以前
    \usepackage[dvipdfm]{graphicx,color}
    \usepackage{mediabb}
    

    と書いていた部分は、修正が必要。まず、mediabbは不要、というか使えなくなっているらしい。代わりにdvipdfmxが画像のサイズなどを自動的に調べてくれるようだ。また、graphicxのオプションでは、dvipdfmが使えない。dvipdfm.defがない、というエラーが出る。ドライバーの指定としては、dvipdfmx とすればよい。つまり、

    \usepackage[dvipdfmx]{graphicx,color}
    %\usepackage{mediabb} %% この行は削除する。
    

    と修正する。

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

以前Windows版の自前LaTeXビルドを作ったので、Mac版も簡単かと思ったら、思わぬところでてこずってしまった。platex, dvipdfmx, Skim を連続して行うコマンドを作れないのだ。検索したり試行錯誤したり、いろいろやった結果、インラインでシェルスクリプトを実行させることで、望みの結果が得られた。

Sublime Text 3のメニューから、Tools –> Build System —> New Build System… と進むと、untitled.sublime-build というファイルが作られて編集状態となる。これを次のようにして、適当な名前で保存する。今回は、pLaTeX-dvipdfmx-Skim.sublime-build という名前にした。こうすると、Build Systemに、pLaTeX-dvipdfmx-Skim という項目が追加される。

{
	"osx" : {
		"selector" : "source.tex",
		"path" : "/usr/texbin:$PATH",
		"shell" : false,
		"cmd" : [
			"/bin/sh", "-c", 
			"platex $file -interaction=nonstopmode && dvipdfmx $file_base_name.dvi && open -a Skim $file_base_name.pdf"
		]
	}
}

ポイントは、シェル(/bin/sh)を -cオプションで起動することにより、そのあとに書いたシェルスクリプトを実行させること。プログラムは && で区切る。こうすると、TeXの文法エラーで止まったとき、それ以降のプログラムは実行されない。

Sublime Text 3でLaTeXToolsに変更を加えて日本語pLaTeX文書の組版(Windows版)

いろいろやってみたが、一番ポピュラーなLaTeXToolsを使う方法をメモするのを忘れていた。

LaTeXToolsに変更を加えるには、Packages/User にLaTeXTools.sublime-settings という自分用の設定ファイルを作る。これは、Sublime Text 3からLaTeXToolsの設定メニューに入ると作成用のメニューがあるので、それを選ぶと自動的に作られる。変更はこちらに行い、本体はいじらない。変更箇所としては、TeXLiveをインストールした場所の指定、TeXのdistroとしてMikTeXじゃなくてTeXLiveを選んでいること、そして、日本語LaTeXを使うために、command に変更を加える。

まずは、TeXLiveの場所、PDFのPreviewerとしてSumatraPDFを設定、などなど。

// ------------------------------------------------------------------
// Platform settings: adapt as needed for your machine
// ------------------------------------------------------------------

	"osx": 	{
		// Path used when invoking tex & friends; MUST include $PATH
		"texpath" : "$PATH:/Library/TeX/texbin:/usr/texbin:/usr/local/bin:/opt/local/bin"
		// Path to PDF viewer, if needed
		// TODO think about it. Also, maybe configure it here!
	},


	"windows": {
		// Path used when invoking tex & friends; "" is fine for MiKTeX
		// For TeXlive 2011 (or other years) use
		// "texpath" : "C:\\texlive\\2011\\bin\\win32;$PATH",
		"texpath" : "C:\\texlive\\2016\\bin\\win32;$PATH",
		// TeX distro: "miktex" or "texlive"
		"distro" : "texlive",
		// Command to invoke Sumatra. If blank, "SumatraPDF.exe" is used (it has to be on your PATH)
		"sumatra": "",
		// Command to invoke Sublime Text. Used if the keep_focus toggle is true.
		// If blank, "subl.exe" or "sublime_text.exe" will be used.
		"sublime_executable": "",
		// how long (in seconds) to wait after the jump_to_pdf command completes
		// before switching focus back to Sublime Text. This may need to be
		// adjusted depending on your machine and configuration.
		"keep_focus_delay": 0.5
	},

	"linux" : {
		// Path used when invoking tex & friends; MUST include $PATH
		"texpath" : "$PATH:/usr/texbin",
		// Command to invoke Python. Useful if you have Python installed in a
		// non-standard location or want to use a particular version of python.
		// Both Python2 and Python3 are supported, but must have the DBus bindings
		// installed.
		"python": "",
		// The name of the ST2 or ST3 executable. On Ubuntu, both subl and sublime-text are
		// available for ST2; adjust as needed for other platforms, and for ST3
		"sublime": "sublime-text",
		// How long to wait after evince or okular has launched before sending a sync message
		// in seconds, floating point; choose 2.0 or 3.0 on a slower machine, 0.5 on a fast one
		// Note: only tweak this if sync after launching the PDF viewer does not seem to work,
		// or if the PDF viewer opens instantly and you don't want to wait.
		// Default: 1.5 (works on my MBP4,1...)
		"sync_wait": 1.5,
		// Command to invoke Sublime Text. Used if the keep_focus toggle is true.
		// If blank, "subl" or "sublime_text" will be used.
		"sublime_executable": "",
		// how long (in ms) to wait after the jump_to_pdf command completes
		// before switching focus back to Sublime Text. This may need to be
		// adjusted depending on your machine and configuration.
		"keep_focus_delay": 0.5
	},

次に、builder settings のところに、latexmk を呼び出すときに使う command を定義する。これで完了。

	// OPTION: "builder_settings"
	// Specify builder-dependent settings and preferences
	// Possible values: see README or documentation provided with
	// third-party build engine.
	// Builder setting can be general or OS-dependent

	"builder_settings" : {

		// General settings:
		// See README or third-party documentation
		"command" : ["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'",
			"-f", "-norc", "-gg", "-pdfdvi"],

		// (built-ins): true shows the log of each command in the output panel
		"display_log" : false,

		// Platform-specific settings:
		"osx" : {
			// See README or third-party documentation
		},

		"windows" : {
			// See README or third-party documentation
		},

		"linux" : {
			// See README or third-party documentation
		}
	},

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用のプラグインはまた後で。