MacBook Pro 設定メモ(8) Sublime Text 3でTeXとAsymptoteのビルド

Sublime Text 3 は既に入れてある。あとは、TeXとAsymptoteのビルドの設定。これは、以前に作ってあるものを修正するだけ。修正箇所は、パス。今回は、/usr/local/texbin なので、ここにパスを通せばよい。

まず、upLaTeX.sublime-build


{
	"osx" : {
		"selector" : "source.tex",
		"path" : "/usr/local/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
		"shell" : false,
		"cmd" : [
			"/bin/sh", "-c", 
			"uplatex -halt-on-error -interaction=nonstopmode -synctex=1 -file-line-error -shell-escape '$file' && dvipdfmx '$file_base_name.dvi' && open -a Skim '$file_base_name.pdf'"
		]
	}
}

つぎに、Asymptote.sublime-build


{
	"osx" : {
		"selector" : "source.asy",
		"path" : "/usr/local/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
		"shell" : false,
		"cmd" : [
			"/bin/sh", "-c", 
			"asy -vv -f pdf  '$file' && open -a Skim $file_base_name.pdf"
		]
	},

	"variants" : [
		{
        "name" : "asy -vv -f eps & Preview EPS",
		"osx" : {	
			"path" : "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
        	"shell" : false,
			"cmd" : [
				"/bin/sh", "-c", 
				"asy -vv -f eps '$file' && open -a Preview $file_base_name.eps"
				]
			}
		},

		{
        "name" : "asy -V -vv",
		"osx" : {	
			"path" : "/usr/local/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
        	"shell" : false,
			"cmd" : [
				"/bin/sh", "-c", 
				"asy -V -vv \"$file\""
				]
			}
		},

		{
        "name" : "asy -vv -noprc -f pdf -render 0 & Skim Preview",
		"osx" : {	
			"path" : "/usr/local/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
        	"shell" : false,
			"cmd" : [
				"/bin/sh", "-c", 
				"asy -vv -noprc -f pdf -render 0 \"$file\" && open -a Skim $file_base_name.pdf"
				]
			}
		},

		{
        "name" : "asy -vv -prc -f pdf -render 0 -o filename-prc-render0.pdf",
		"osx" : {	
			"path" : "/usr/local/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
        	"shell" : false,
			"cmd" : [
				"/bin/sh", "-c", 
				"asy -vv -prc -f pdf -o $file_base_name-prc-render0.pdf -render 0 \"$file\""
				]
			}
		},

    	{
        "name" : "Skim-Preview",
        "osx" : {
        	"path" : "/usr/local/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin",
			"shell" : false,
			"cmd" : [
				"/bin/sh", "-c", 
				"open -a Skim $file_base_name.pdf"
				]
			}
    	}
   	]
}

Asymptoteの方は、variantsをたくさん作ったのだが、まあ、これはなくてもいいか。3Dの場合だけ、renderをいくつにするか、prcかnoprcかで悩むことがあるのだが、それは、ソースファイルの方に設定を書けばよいだけなので。

MacBook Pro 設定メモ(7) Asymptote

AsymptoteはTeXLive 2020に含まれているから、そのまま動くはず。ただし、設定ファイルがまだ無いから、デフォルトの状態。ということで、

asy -vv foo.asy

とすると、無事に foo.eps が出来た。ちなみに、詳細表示は、

kpsewhich --var-value=TEXMFMAIN
kpsewhich --var-value=ASYMPTOTE_HOME
Using configuration directory /Users/hoge/.asy
Using history /Users/hoge/.asy/history
Welcome to Asymptote version 2.65
cd /Users/hoge/bar
Processing foo
Loading plain from /usr/local/texlive/2020/texmf-dist/asymptote/plain.asy
...

こんな感じで続く。TeXLive付属のAsymptoteの場合、デフォルトでは環境変数ASYMTOTE_HOMEは空になっていて、その場合は、~/.asy が設定フォルダーとなる。つまり、~/.asy/config.asy を探しに行くというわけだ。普段はPDFの出力にしてるので、そのあたりを、config.asy に書き込めばよい。もし、config.asy の場所を変えたい場合は、.zshenv にASYMPTOTE_HOME を設定すればよい。

設定を済ませて、asy foo.asyとしたのだが、Ghostscriptが見つからないよ、というエラー。そうか、TeXLiveではそこまではやってくれないのか。Homebrewで入れる。

brew install ghostscript

とするだけ。これで、PDFの出力もOKだ。

Ubuntu16.04LTSにTeXLive2017を再インストール

とある理由で、再インストールすることに。以下、手順をメモ。

まずは、アンインストール。これが面倒。あちこちにあるtexlive関係のファイルと、無効になるシンボリックリンクなどを一掃する。やり方は検索すると出てくるので、ここは省略。

LINUXにインストールする方法は幾つかあるが、TeXLive本家の最新版からネットインストールする。install-tl-unx.tar.gz をダウンロードして、その階層で tar xvf install-tl-unx.tar.gz などとして解凍する。すると、install-tl-20180204 (数字は、そのときの日付になるのだろう、多分) というフォルダーができる。その中に入り、
sudo ./install-tl
として、ルート権限でインストールすると、/usr/local/texlive/ 以下にインストールされる。ルート権限なしで自分のホームにインストールすることも可能だが、環境変数などを指定することになる。ここでは、前と同じように、/usr/local/texlive とした。

30分ほどでインストール完了。実行ファイルは /usr/local/texlive/2017/bin/x86_64-linux にあるので、これをPATHに追加する。ホーム直下の .profile に
PATH=”/usr/local/texlive/2017/bin/x86_64-linux:$PATH”
を追加する。

これで終わりではなく、ダミーのパッケージを入れる。これは、Ubuntuのパッケージ管理プログラムによって、いらぬ変更をさせないために必要らしい。以前は、この作業をしていなかった。

引き続き、インストーラーがある階層で作業する。ここで、
sudo apt install equivs
wget http://www.tug.org/texlive/files/debian-equivs-2017-ex.txt
equivs-build debian-equivs-2017-ex.txt
sudo dpkg -i texlive-local_2017-1_all.deb
とするとダミーパッケージができるらしい。このあたりは、みようみまね。

[追記]
ちょっと困ったことが。試しに tlmgr を使ってみようと思ったのだが、sudo tlmgr update –list としたところ、command not found なるエラーが。sudoなしのtlmgrだと認識するのだが、管理者権限でtexlive入れたからなあ。検索したところ、同様の事例はけっこうあるようだ。

[追記2]
セキュリティーの関係で、sudo時はユーザーPATHは引き継がれないようだ。少なくとも Ubuntu 16.04 の場合は。パスを追加することも考えたが、/usr/local/texlive 以下のオーナーを自分に変更してしまうことにした。sudoでインストールしているから、現状はオーナー root, グループもrootとなっている。そこで、
sudo chown -R $USER:$USER /usr/local/texlive/
として、オーナー、グループともに、自分に変更。すると、書き込み可能となるので、普通に tlmger できる。とりあえず、これで行こうかと思う。

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

文字Bのときだけフリーズするという不思議な現象

とある理由で、旧版のasymptoteを利用している。asymptote 2.16 と ghostscript 9.05 なのだが、不思議なエラーに遭遇した。以前、ghostscript 7.07のときは大丈夫だったのだが。

3次元の図版なのだが、あれこれ実験した挙句に分かったことは、Computer Modern以外のフォントでも文字Bを出力しようとすると、gsが無限ループに陥ってしまう。不思議なことにBをAとかCに変えると普通に図版が出来るので、文法エラーではない。Computer ModernならBもちゃんと出る。不思議だ。まったく不思議だ。

aymptote本家のBBSに質問しようかとも思ったが、どうも旧版のサポートはしないという方針らしい。あきらめるしかないですかね、これは。

ということで、TeXLive収録のasymptote 2.41とHomebrewで入れたghostscript 9.21の組合せにした。最新版に近いと思う。パスの優先順にをTeXLive, /usr/local/bin の順にしたので、旧版のuptetexを使う際には(実は、まだメインの文書はuptetexを使っているのだ)platexの絶対パスを指定していして使うことになる。実はTeXShopのlatexは絶対パスで指定しているので、ここは大丈夫。

以上、とりあえずメモ。

Ghostscript 9.07をソースからビルド(Mac)

[修正版]

とある事情(Asymptote関係)で,Ghostscripの9.14以前のバージョンをインストールすることにした。Ghostscript/GhostPDL Old Releasesにいろいろあるが,./configure で文句を言われなかった 9.07 を入れることに。適当な所にダウンロードして解凍し,中に入って,./configure, make, make install で終了。詳しくは,

tar xvzf ghostscript-9.07.tar.gz
cd ghostscript-9.07
LDFLAGS="-L/usr/lib" ./configure --disable-compile-inits --prefix=/usr/local/gs907
make
make install

[修正]ここで,ポイントは --disable-compile-inits なるオプション。最初はこれを付けなかったのだが,どうもこれがないと,Resource以下が作られないようだ。 LDFLAGS="-L/usr/lib" はシステムのライブラリーを先に探せ,というもの。prefixがデフォルトの /usr/local 以外なので,付けてみた。MacPortsなどのライブラリーと混同させないためにはこれがあると良いという。オフィシャルのインストールガイドを見て,追加してみた。[/修正]

これで分かるように,/usr/local/gs907 以下にインストールした。このバージョンのgsを使うときは,/usr/local/gs907/bin にパスの優先権を与えるようにしなくてはならない。

実は,これだけではフォント関係のファイル群が足りない。それは別途用意する必要がある。ちょっとインチキなのだが,以前Homebrewで入れていた(今はもうリンクが切れている)9.07の残骸があったので,そこからフォント関係のResourceをコピーして代用することにした。
[修正]ここも直した。Resource以下があるので,TeXLive2016付属の cjk-gs-integrate スクリプトにより,フォント関係をインストールできる。具体的には,このgsにパスを通したあとで,

sudo cjk-gs-integrate --link-texmf --force

とすればよい。[/修正]

asymptote 2.16 + ghostscript 9.07 で,texcomman=”platex” として3次元データ込のPDFが作成されることを確認。これが目標だったのだ。TeXLive2016に移行したとき,Homebrewでgsを最新版にしたのだが,古いものがなくなってしまって,ちょっと困っていたのだった。これで以前の環境に戻れると思う。

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} %% この行は削除する。
    

    と修正する。

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でセプテンバーフォントが使えるようになった。分かってみると実は簡単なことであったが,なんだかんだで数時間を費やしてしまった。