Twitter Digest 2018-01-21

  • 帰って見たら,コロッケサンドじゃくて,クロッカンとかいうのが入ってた。レシートはコロッケなのに・・・。やれやれ。面倒だけど,その都度,自分で確認するか・・・。 11:18:34, 2018-01-21
  • 改めて使ってみたら,TeXmakerも悪くないかも。デザインがいまいちだけど。LaTeXに特化している分,細かい使い勝手はよい。 11:22:26, 2018-01-21

Twitter Digest 2018-01-16

  • TeXworksにコード・フォールディングあるってどこかに書いてあったのだが,探しても見つからない。というか,だから他のエディター探しているんだけど。 12:27:39, 2018-01-16
  • Sublime Textはコード・フォールディングできるが,begin endの間がインデントされてないとダメみたい。つまり,syntax対応にはなってない。 12:29:51, 2018-01-16
  • 一方,TextMateでは,インデントしてなくても \begin{hoge}… \end{hoge}を折りたためる。\section も丸ごとフォルドできる。 12:31:21, 2018-01-16
  • ということで,やっとSublime Textに安住の地を見つけたと思ったのだが,TextMateに移行しようかなあと悩み中。 12:32:27, 2018-01-16

TextMate2メモ(4) LaTeX Bundleの変更(別バージョン)

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)

TextMate2メモ(3) LaTeX Bundleの変更(簡易版)

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.
と出力されるので,良きに計らってはくれているものの,パラメーターが正しく渡されていないようだ。

TextMate2メモ(2)

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から落としてきたものに対して変更を加えることにする。

TextMate2メモ(1)

そういえば 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に手を加えてみたい。

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[]といった[]を含む箇所をコメントアウトするなり,適当に手を加えた。出来上がりはまずまずだと思う。

Twitter Digest 2018-01-09

  • Sublime Text 3でのAsymptoteのsyntax highlightの改訂版。Emacs用とほぼ同じに出来た。 19:44:39, 2018-01-09
  • しかし,いまだEmacsに劣る部分あり。Emacsだと,line l=line(A,B); と書くとき,最初のlineは型(type)と認識され,次のlineは関数(function)と認識されている。色が違うので一目瞭然。これはどうやって実現しているのだろうか。 19:56:06, 2018-01-09

Twitter Digest 2018-01-08

  • Sublime Text 3用のasymptote syntax が見つからない。Atom用を変換(CSON->JSON->XML)したけどうまく動作せず。うーむ。困った。 01:03:40, 2018-01-08
  • 何とかSublime Text 3でのAsymptoteのsyntax highlightに成功。PackageDevを使って,JSON-tmLanguageを新規作成。ATOMから持ってきたCSONをJSONに変換して,コピペ。エラー箇所をコメントアウトしたら上手く行った。 10:00:57, 2018-01-08
  • Sublime Text 3からAsymptoteのビルド&プレビューも出来るようになった。以前,upLaTeXの独自ビルダーを作った経験が生きた。 11:12:45, 2018-01-08
  • Asymptoteのsyntax highlightに関しては,Emacsの方が上だが,Sublime Text 3に移行しても良いレベルではある。 11:15:27, 2018-01-08
  • AsymptoteにはEmacs用のモードが内蔵されているが,Syntaxはどのようにして生成したのだろうか。 11:16:24, 2018-01-08
  • 変換用のスクリプトを起動しようとしたら,python3が無いよと言われ,Homebrewで入れようとしたら,アップデート始めて,ruby が2.0なので2.5に上げよと言われ,updateした。けっこう時間かかった。最近homebrew全然使ってなかったなあ。 21:09:31, 2018-01-08

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 はただの変数と同じ。ということで,完全に満足はできないのだが,まずまずではある。