Mac OS X

Sublime Text で LaTeXtoolsのBuilderが見つからないというエラー

備忘録。

原稿は,もっぱらMac上でSublime Textというエディターを使って,LaTeXで書いている。Sublime TextにはLaTeX toolsというものが入っていて,LaTeXの起動してプレビューできるようになっている。所謂統合環境というものである。いちいちターミナルから,

uplatex -halt-on-error -interaction=nonstopmode -synctex=1 -file-line-error -shell-escape hoge.tex
dvipdfmx hoge.dvi
open -a Skim hoge.pdf

などとコマンドを入力しなくてもよいようになっている。ところが,本日,いきなりエラーが発生した。

曰く,Traditional Builder が見つかりません,だと。緊急避難的に,Terminalから組版を行ったのだが,これでは面倒だ。検索すると,同様の憂き目にあっている人がけっこう居て,StackExchangeのサイトで解決策を見つけた。

Sublime Textを終了させて,ターミナルから,

open -a "Sublime Text"

として起動させよ,とのこと。やってみると,ちゃんとTraditional Builderを見つけれくれた。これで元通りだ。

しかし,何故に突然こうなったのか疑問。

自炊PDF用のプログラムを修復した

正確には、プログラムを修復したのではなく、ビルドするための環境を修復したのだが。

最初にプログラムを書いたのは、2013年頃で、みようみまねで、OpenCVとC++を勉強しながら、何とか動作するプログラムを作成した。その後、2015年頃かな? HomebrewとかXCodeをアップデートした影響だと思うが、コンパイルできなくなってしまった。あれこれ調べて、OpenCVのバージョンを3から2に下げ、ImageMagickもヴァージョン7から6に下げることで、なんとかコンパイルできるようになった。

以上は、すべて2011版のMacBook Airでの話。2020年にMacBook Pro (最後のインテルMacですよ) に変わって、いまでも使ってるのだが、久しぶりに自作のプログラムを起動しようとしたら、ライブラリーが見つからないとかの実行時エラーで動かなかった。なんとか、シンボリックリンクを張り、とりあえず動作するようにはなったが、これでは、プログラムの修正や改良もできない。やれやれ。

一番良いのは、最新の環境にして、一からプログラムを書き換えることだと思うが、もうね、いろんな事を忘れているし、新しいことを覚えるには歳もとりすぎている。ううむ、困る・・・。

ということで、とりあえず、今の環境でプログラムのビルドを可能にしたい。いろいろやったところ、前回と同様に、OpenCVとImageMagickのバージョンを下げることで、成功した。

実は、OpenCVの方は、古いバージョン2を既にhomebrewで入れてある。ただし、リンクは張ってない状態で、Cellarに入っていて、/usr/local/opt/opencv@2 から参照できるようにもなっている。そこで、コンパイルするときに、それを読み込むように Makefile に書く。

INC_OPENCV2_PATH = /usr/local/opt/opencv@2/include
LIB_OPENCV2_PATH = /usr/local/opt/opencv@2/lib

そして、これをコンパイルするときに、-I$(INC_OPENCV2_PATH) -L$(LIB_OPENCV2_PATH) として読み込む。

OpenCVは以上でOKなのだが、ImageMagickで困った。何を読み込むのか複雑なため、コンパイルのときに、Magick++-config なるプログラムを実行させて、必要なライブラリなどを取り込むのが普通のようだった。そのため、imagemagick@6 以下にバージョン6を収録するだけでは不十分で、リンクを張る必要がある。

brew link imagemagick@6 --force


で良いと思ったのだが、エラーが出た。曰く、

Linking /usr/local/Cellar/imagemagick@6/6.9.12-42...
Error: Could not symlink bin/Magick++-config
Target /usr/local/bin/Magick++-config
is a symlink belonging to imagemagick. You can unlink it:
brew unlink imagemagick

To force the link and overwrite all conflicting files:
brew link --overwrite imagemagick@6

そこで、

brew unlink imagemagick
brew link --overwrite imagemagick@6


とした。
必要ならパスを通せ、というメッセージが出たが、ワタシの場合、それはしなくても大丈夫だった。convert –version などとしてバージョンを調べると、ちゃんと6になっている。これで、ImageMagickのバージョン6にダウングレード出来た。

あとは、以前のMakefileのままでmakeして、警告はいっぱい出るものの、エラーはなくて、なんとかコンパイルに成功した。

次の目標は、OpenCV3とImagemagick7で動作するように、改良することだが、何時になるか。いや、この際、C++ではなく、Pythonに乗り換えるという手もある。Python上にも、OpenCVや他の画像ライブラリがあるらしいのである。

TeXLiveの補完ライブラリーを入れる

ライセンス関係とか、いろんな理由でTeXLiveに入ってないものがある。例えば、Mac上でヒラギノフォントを埋め込むためのスクリプトなど。これらを別途入れる。

https://contrib.texlive.info を見ながら、インストールする。

tlmgr repository add http://contrib.texlive.info/current tlcontrib
tlmgr pinning add tlcontrib "*"

そして、全部をインストールするには、

tlmgr install collection-contrib

とする。

さて、無事にインストールされたか、確認する。

which cjk-gs-integrate-macos

とすると、

/usr/local/texbin/cjk-gs-integrate-macos

と出るので、大丈夫だ。

では、フォントのシンボリック・リンクを作成する。

cjk-gs-integrate --link-texmf --cleanup
cjk-gs-integrate-macos --link-texmf

確認してみる。/usr/local/texlive/texmf-local/fonts/opentype/cjk-gs-integrate/ に大量のシンボリック・リンクが作られている。ファイルシステムを検索しているのだろうか、TEXMFHOME以下に置いていた HiraMinPro-W3.otf とか、TeXLive 2020 の配布物である HaranoAjiMincho-Medium.otf などについても、シンボリック・リンクが作られている。あとは、埋め込み設定をするだけ。

LaTeXでの日本語フォントの埋め込み設定

MacBook Proの設定の番外編。TeXLive 2020では、デフォルトで原の味フォント(haranoaji)という奇妙な名前の日本語フォントが埋め込まれるようになっている。源ノ明朝・源ノ角ゴシックをAdobe-Japan1になるように修正したものだという。悪くはないが、ヒラギノに慣れているので、選べるようにしたい。以下、とりあえず上手く行っている方法。

最優先されるupdmap.cfgは、TEXMFHOME=~/Library/texmf/web2c/updmap.cfgである。ここを書き換えて updmap-sys することによって、/usr/local/texlive/2020/texmf-var/fonts/map/dvipdfmx/updmap/kanjix.map に、どのフォントを埋め込むかが反映される。具体的には、~/Library/texmf/web2c/updmap.cfg を次のような感じで書いて、updmap-sysする。

jaEmbed hiragino-pron
jaVariant -04
# jaEmbed haranoaji
# jaVariant -04

この場合、ヒラギノ ProNの jis2004版が埋め込まれる。上の2行をコメントアウトして、下の2行のコメントを外せば、今度は、原ノ味フォントになる。

MacBook Pro 設定メモ(10) 自作キーボード配列

キーボードは日本語配列、俗に言うJISキーボード。理由は、スペースの両側に、英数・かな、のキーがあり、これで、無変換・変換の切替ができること、それから、Aの左側がコントロール・キーであること。ただし、JISキーボードで不満なのは、ブラケットが上下に並んでいること。ここは、左右に並ぶISO配列(US配列)の方が良い。あと、バックスラッシュの位置も問題あり。ということで、右側の2列を好みに合わせて、再配列する。

ずっと前に作っていた、JISTeXというkeyborad layoutを再利用。~/Library/Keyboard Layouts/ に、JISTeX.keylayout と JISTeX.icns の2つを入れて、システム環境設定からキーボードを開き、入力ソースから、その他にあるJISTeXを追加する。再起動すれば有効となる。

さて、動作確認。JISTeXは英数モードであり、これは問題ない。ひらがなにすると、無効になるのは当然なのだが、上手い方法がある。日本語環境設定(システム環境設定からキーボードを選ぶのと同じ)から、入力ソースに行く。JISTeXと日本語が並んでいるので、日本語を選ぶ(つまりApple純正の日本語変換)。英字のレイアウトという項目があるので、これをABCからJISTeXに変更する。ちなみに、同じ所に句読点の設定や、円マークとバックスラッシュの選択などもある。この修正により、ひらがなモードでも、カギかっこ類が左右の配列になる。さらに、この英字のレイアウトをJISTeXにしたことから、半角入力モード(英字モード)でも、JISTeXが有効になった。ちょっと驚いたが、よくよく考えると、日本語入力の英字のレイアウトをJISTeXにするというのは、正にこの通りの設定なので、当たり前といえばそうだった。

MacBook Pro 設定メモ(9) Tuxera NTFS for Mac

新規購入でも良いかと思ったが、以前購入したライセンスが使えるかもと思い、Tuxera NTFS for Mac のサイトに行き、購入ではなく、ダウンロードを選ぶ。インストールの最後になって、お試し(15日間)ではなく、ライセンスを入力して終了。どうやら、以前のライセンスがまだ有効だったようだ。これで、Microsoft のNTFSフォーマットのHDDがMacでも読み書き出来る。

それにしても、普段の環境に戻す作業が存外に多くて、いささか疲れた。あと少し。頑張ろう。

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だ。

MacBook Pro 設定メモ(6) TeXLive

いよいよ、TeXLiveのインストール。何度かやったことがある作業なので、大丈夫なはずだが・・・。

まずは、http://mirror.ctan.org/systems/texlive/tlnet からインストーラーである install-tl-unx.tar.gz をダウンロードする。どこでも良いが、Safariが自動的に HOME/Downloads/ にダウンロードしたので、そこで作業する。解凍すると、install-tl-20200525 というフォルダーが出来る。そこに移動して、install-tl というperlスクリプトを起動する。

cd ~/Downloads/install-tl-20200525/
sudo perl install-tl -no-gui

そうそう、準備として、システム環境設定のセキュリティとプライバシーから、プライバシーに進み、フルディスクアクセス権をターミナルに与えるという設定にした。これが必要かどうかは不明だが。また、最初は、sudo 付けなかったのだが、/usr/local/texlive が作れないというエラーが出てしまった。

設定は、概ねデフォルトのまま。インストール先は、/usr/local/texlive/2020 だが、これでよい。高度な設定というボタンから、細かい設定を見ていく。
TEXDIR = /usr/local/texlive/2020
TEXMFLOCAL = /usr/local/texlive/texmf-local
TEXMFHOME = ~/Library/texmf
TEXMFVAR = ~/Library/texlive/2020/texmf-var
TEXMFCONFIG = ~/Library/texlive/2020/texmf-config
となっているが、このままで良いかな。

悩ましいのが、ポータブルにするかということ。前にMacBook Air に入れたときは、ポータブルにしたのだが、結局、それを利用することはなかった。ということで、今回は、ポータブル設定はなし、つまり、ディレクトリーは上記の通りの絶対パスに決めた。

2時間くらいかかっただろうか。なんとか成功し、次のメッセージでインストール完了。

Welcome to TeX Live!

See /usr/local/texlive/2020/index.html for links to documentation.
The TeX Live web site (https://tug.org/texlive/) contains any updates and
corrections. TeX Live is a joint project of the TeX user groups around the
world; please consider supporting it by joining the group best for you. The
list of groups is available on the web at https://tug.org/usergroups.html.

Add /usr/local/texlive/2020/texmf-dist/doc/man to MANPATH.
Add /usr/local/texlive/2020/texmf-dist/doc/info to INFOPATH.
Most importantly, add /usr/local/texlive/2020/bin/x86_64-darwin
to your PATH for current and future sessions.
Logfile: /usr/local/texlive/2020/install-tl.log

/usr/local/texlive/2020/bin/x86_64-darwin にパスを通さねば。以前、インストールしたときは、/usr/texbin というシンボリックリンクを作ったのだが。今回は作れるのか?

/usr/texbin は Operation not permitted ということで、結局作れなかった。/usr/local/以下なら作れるようだ。


sudo ln -s /usr/local/texlive/2020/bin/x86_64-darwin/ /usr/local/texbin

次は、/usr/local/texbin にパスを通す。とりあえず、暫定ということで、

export PATH=/usr/local/texbin:$PATH

とした。zshでも、この構文は使えるらしい。そうすると、which uptex などで、パスが通っていることが確認できた。あとは、ログイン時にパスを通すために、.zshenv に上記の設定を書いた。

最後に、カスタマイズ。TEXMFHOMEである ~/Library/texmf/ 以下に、個人的なマクロ、フォント、クラスファイルなどをコピー。ここは、texhash しなくてもファイルサーチする設定のはず。ただし、updmap-sysは必要。sudo付けないと、/usr/local/texlive/ 以下のファイルに書き込みできないとエラー出るので、sudo updmap-sys とする。ううむ、避けたい事態だが、仕方ないのか。

祈りながら(?)、ターミナルから、uplatex test.tex とする。無事にコンパイルできたようだ。dvipdfmx test.dvi としてPDFも出来た。ちょっと驚いたのが、日本語フォントがヒラギノではなく、HaraNoAji(原ノ味)というフォントだったこと。これでも良いが、ヒラギノに変更できるはずだよね。あとで調べよう。

[追記]何度もインストールしてるのに、今回も完全とは行かなかった。インストールするとき、sudo を付けないと進まなかったため、そうしたのだが、すると、/usr/local/texlive 以下がすべて、所有者 root、グループ wheel になってしまった。そのためか分からないが、updmap-sys も sudo updmap-sys としないと書き込みできないのだが、その際に、次のような警告が出る。

updmap [WARNING]: resetting $HOME value (was /Users/hoge) to root's actual home (/var/root)

その先を読むと、どうやら、TEXMFHOME以下にある /Users/hoge/Library/texmf/web2c/updmap.cfg が読み込まれていないようなのだ。だから、自分で設定したフォントの設定とかがエラーになってしまった。

どうしたものか。選択肢は2つ。修正できるなら修正、そうでなければ、別の場所に改めてインストールし直し。修正を試みた。sudo chown を使って、texlive以下のすべてのファイルを、所有者を自分、グループをadminとした。そうすると、updmap-sys が sudo なしで実行できて、/Users/hoge/Library/texmf/web2c/updmap.cfg も無事に読み込まれたようだった。

ということで、事なきを得たのだが、そもそもの問題は、インストールで sudo を使ったことにあるかなあ。しかし、sudoなしでは書き込めないと言われたしなあ。そういえば、Homebrewも/usr/local 以下にインストールされているのだが、sudo要らなかったような気がするけどなあ。記憶曖昧だが。

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があると安心。