Twitter Digest 2018-01-29
- keyval, xkeyval パッケージの使い方が少しだけだが分かった気がする。既存の漢文用マクロに応用してみたい。 10:30:19, 2018-01-29
TextMateのLaTeX bundleで,LaTeXの実行を指示している箇所が texmate.py にあるので,そこを直接修正することで uplatex での組版ができるようにした。具体的には,pdflatexが選択されているときは,これをptex2pdfで置き換え,また,latexが選択されているときは,これをuplatexで置き換えた。また,latexのあとは,dviをpdfに変換するのだが,dvi2psとps2pdfの組合せの代わりに,dvipdfmxを使うように変更した。具体的は変更は以下の通り。
編集するファイルは,
~/Library/Application Support/TextMate/Managed/Bundles/latex.tmbundle/Support/bin/texmate.py
補助的な関数の定義のあと,914行目からメインのルーティンが始まる。command の種類によって,様々な処理を行うようになっているが,メインは command が latex の場合。そこで,途中の
elif command == 'latex':
以下のブロック(1044行目あたり以降)を次のように書き換えた。
elif command == 'latex':
engine_options = construct_engine_options(typesetting_directives,
tm_engine_options, synctex)
if engine == 'latex':
engine = 'uplatex'
engine_options = "-shell-escape -synctex=1 -interaction=nonstopmode"
elif engine == 'pdflatex':
engine = 'ptex2pdf'
engine_options = "-u -l -ot \"-interaction=nonstopmode -synctex=1 -file-line-error -shell-escape\" "
command = "{} {}".format(engine, engine_options)
status = run_latex(command, filename, cache_filename, verbose)
tex_status, fatal_error, number_errors, number_warnings = status
number_runs = 1
if engine == 'latex':
# call("dvips {0}.dvi -o '{0}.ps'".format(file_without_suffix),
# shell=True)
# call("ps2pdf '{}.ps'".format(file_without_suffix), shell=True)
call("dvipdfmx {0}.dvi", shell=True)
if tm_autoview and number_errors < 1 and not suppress_viewer:
viewer_status = run_viewer(
viewer, filepath, pdffile_path,
number_errors > 1 or number_warnings > 0 and
tm_preferences['latexKeepLogWin'],
'pdfsync' in packages or synctex, line_number)
TextMateのLaTeX bundleは,platex, uplatexをサポートしていない。また,デフォルトはpdflatexとなっている。自分が使いたいのは,uplatexなので,最小限の手間でこれが使えるようにした。実際には,ptex2pdf を使うことにした。これが uplatex, dvipdfmx を順に呼び出してPDFを作るので,pdflatexと同じというわけだ。
~/Library/Application Support/TextMate/Managed/Bundles/latex.tmbundle/Support/lib/Python/tmprefs.py を編集する。36行目からの
self.default_values = {
'latexAutoView': True,
'latexEngine': "pdflatex",
'latexEngineOptions': "",
'latexVerbose': False,
'latexUselatexmk': True,
'latexViewer': "TextMate",
'latexKeepLogWin': True,
'latexDebug': False,
}
を次のように書き換えた。
self.default_values = {
'latexAutoView': True,
'latexEngine': "ptex2pdf",
'latexEngineOptions': '-u -l -ot "-synctex=1 -file-line-error -shell-escape"',
'latexVerbose': True,
'latexUselatexmk': False,
'latexViewer': "TextMate",
'latexKeepLogWin': True,
'latexDebug': False,
}
ポイントは,デフォルトのlatexEngineをptex2pdfにして,デフォルトのlatexEngineOptionsを-u -l -ot “-synctex=1 -file-line-error -shell-escape” にしたこと。これで,とりあえずコンパイルできる。ただし,コンソールを見ると,冒頭部分に,
Multiple filename arguments? OK, I’ll take the latter one.
と出力されるので,良きに計らってはくれているものの,パラメーターが正しく渡されていないようだ。
TextMateのLaTeX bundleに変更を施すことにした。これはGitHubで公開されている。GitHubのLaTeX Bundleサイト によれば,TextMateでインストールしたものを一旦アンインストールし,しかるのちに,Git Cloneすべし,とのこと。
そこで,まず,アンインストール。そして,~/Library/Application Support/TextMate/Managed/Bundles/ に行って,ターミナルを開き(あるいは,ターミナルから,
cd ~/Library/Application Support/TextMate/Managed/Bundles/
として) そこで,git clone する。つまり,
git clone https://github.com/textmate/latex.tmbundle.git
とする。拡張子 tmbundleはファインダーから見ると1個のファイルのようだが,実はこれはディレクトリー。ターミナルからls -alするとわかる。そこで,中に入っていくと,いろんなファイルを見ることができる。
ということで,GitHubから落としてきたものに対して変更を加えることにする。
そういえば TextMate というプログラマー御用達のエディターがあったなあ,と検索。以前は日本語が使えなかったと思うが,最新のTextMate2 では普通に日本語が使えるらしい。LaTeX Bundleもあるが,デフォルトがpdflatexで,platex, uplatexは選べない。
ちょっと工夫すれば,uplatex でのコンパイルも出来るようだ。以下,メモ。
一番お手軽なのは,TeX文書の冒頭に,
%!TEX TS-program = ptex2pdf %!TEX TS-options = -u -l
と,UNIXのshebang的な指示を加えること。ただし,これはエディターによって形式が異なり,TextMateのものは,TeXShopやSublime Textのものとは少し異なっているようだ。できれば,これじゃなく,LaTeX Bundleに手を加えてみたい。
ちょっと要領が分かってきたので,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[]といった[]を含む箇所をコメントアウトするなり,適当に手を加えた。出来上がりはまずまずだと思う。