Atomに移行中

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

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

自家用の簡易版wrapfigure

まだ欠点があるが,とりあえず自家用としては使えるものが出来たので,メモ。

\makeatletter
\newcount\@HangLines
\newdimen\@IndentWidth
\let\@CurrentPar=\par
\def\@hangcarrypar{% hanging indentationの間は,\parはこの\@hangcarryparに置き換えられる。
	\edef\next{\hangafter=\the\hangafter\hangindent=\the\hangindent}% 現在の値を後で使うため
	\@CurrentPar %% パラグラフを終了。現在,垂直モードのはず。
	\next %%新しいパラグラフで以前の\hangindent, \hangafterを復活させる。
	\edef\next{\prevgraf=\the\prevgraf}% これまでのパラグラフで組み立てた行数を後で参照するため
	\ifnum\prevgraf>\@HangLines %% すでに組み立て行数が指定の字下げ行数より大きい場合は,
		\hangafter=0\hangindent=0pt\prevgraf=0 %%字下げを終了させて,
		\let\par=\@CurrentPar %% \parを元に戻す。
	\else %% まだまだ字下げを続行する場合。
		\leavevmode %% これなしに垂直モードのまま\next だとずっと字下げが続いてダメだった。
		%% しかし,これがあるため,\parが連続したとき無視されずに改行されるという欠点あり。要改良
		\next %% これまで組み立てた行数を\prevgrafに代入する。
	\fi}
\def\MyWrapFig#1#2#3{% #1=Lines, #2=Width, #3=図版など
	\@HangLines=#1%
	\@IndentWidth=#2%
	\setbox0=\vbox{#3}%
	\dimen0=\hsize \advance\dimen0 -\@IndentWidth
	\par
	\vbox to 0pt{\moveright\dimen0\box0\vss}%
	\vskip -\parskip
	\vskip -\baselineskip
	\def\par{\@hangcarrypar}
	\prevgraf=0%
	\hangafter=-#1
	\hangindent=-#2\relax
}
\makeatother

LaTeXのwrapfigureと黒魔術

図版の配置には,wrapfig.styによるwrapfigure環境を使っているのだが,たまに上手く行かないことがある。一番困るのは,図版はとっくに終わって,テキストの回り込み(短くなる部分)も終わっているのに,次の段落で,またもテキストが短くなってしまう現象だ。

前回これが発生したときは,wrapfigure環境の直後が垂直モードで,おそらくはそれが原因。そして \leavevmode を入れることで解決した。しかし,今回はそれとは違う。

原因は分からないものの,wrapfigureが行っている \parshape 関係の処理を強制的にリセットすれば何とかなるはず。検索したところ,同じ症状の人がいるようで,それを参考に以下のコードを挿入。

\makeatletter
\@@par \ifnum\@@parshape=\z@ \let\WF@pspars\@empty \fi % reset `parshape'
\global\advance\c@WF@wrappedlines-\prevgraf \prevgraf\z@
\ifnum\c@WF@wrappedlines< \tw@ \WF@finale \fi
\makeatother

要するに,wrapfigureの内部マクロに直接アクセスしているわけで,いささか黒魔術的ではあるが,仕方ない。

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

    と修正する。

TeXLive2016でトンボが切れる件(とりあえず解決)

順次TeXLive2016に移行中だが,トンボが切れてしまうことがあって,悩んでいた。ドキュメントクラスとして jsarticle の方を使えばよいのだが,jarticleを使うと,トンボを付けたとき,右と下が切れてしまうのだ。

\documentclass[b5paper,tombow]{jarticle}

とすると,これまでの tetex だと,a4サイズのPDFのほぼ中央にb5サイズの本体がくる形で,トンボもおおよそ左右上下に均等な感じで印刷されていた。ところが,TeXLive2016に移行して組版したところ,PDFがa4よりかなり小さくて,右と下が切れた感じなのだ。

TeXが生成するdviには,そもそも紙のサイズという概念がなく,通常はa4サイズで出力される,というような話を以前どこかで読んだ記憶があった。dviからpdfへ変換する段階で紙のサイズを指定することができる,という話も。そこで,紙のサイズを指定するために,これも以前行ったように \special{...} を使ってみた。

\documentclass[b5paper,tombow]{jarticle}
\special{papersize=210mm,297mm}

とすることで,トンボ付きa4サイズのPDFが出来た。ということで,とりあえず解決。

ところで,以前サイズ指定を行ったときは,

\documentclass[b5paper,tombow]{jarticle}
\AtBeginDvi{\special{papersize=210mm,297mm}}

のようにしていたと思うのだが,今回はこれではダメだった。何故なんだろう。

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の文法エラーで止まったとき、それ以降のプログラムは実行されない。

TeXstudioからTeXLive2016を使う(Mac版)

TeXstudioはTeX用の統合エディター。MacではTeXShopが定番ではあるが、code foldingができないのが不満。TeXMakerとそれから派生したTeXstudioでは、latexの\begin...\end環境とセクションなどのcode foldingが出来るらしい。TeXMakerもインストールしたのだが、TeXstudioの方が、さらに高機能らしいので、そちらも導入した。

設定は簡単。とりあえず、latexとdvipfmxへのパスを通せばよい。日本語LaTeXを使うために、コマンドの部分を修正する。LaTeXのところは /usr/texbin/platex -src -interaction=nonstopmode %.texとし、DviPdfのところを /usr/texbin/dvipdfmx %.dvi とする。latexのオプションは修正の余地があるが、とりあえず、元のままにして、プログラムだけをlatexからplatexへと変更した。あと、エディター部分でフォントを適当に。Source Code Pro にしたが、ここはお好みで。

ここで問題が。PDFをプレビューするのだが、内部ビューアーだと日本語フォントが表示されないのだ。フォントを埋め込んでいてもダメ。検索したところ、poppler-dataというのをインストールする必要があるらしい。

実は、Homebrewでpopplerは入れてあった。後は、TeXstudioがそれを認識できるようにすればよい。TeXstudioは /usr/local/share/poppler を読みに行くらしいので、

ln -s /usr/local/Cellar/poppler/0.16.7/share/poppler /usr/local/share/poppler

とシンボリック・リンクを張ってみた。これで、日本語も表示されるようになった。

実は、内部ビューアーを使わずに Skim を外部ビューアーで使う手もあって、こちらも快適。Sublime Textなどは純粋なエディターで内部ビューアーを持っていないから、Skimを使うことになる。

TeXLive2016を使い始める

TeXLive 2016 自体はずっと以前にダウンロードしていたのだが、自前のフォント設定などの移行が大変そうなので、これまで使わずにいた。新旧2つのTeXシステムを共存できそうだったので、使い始めることにした。以下、備忘録。

ダウンロードしていたのは、MacTeX版ではなくオフィシャルのポータブル版。と言っても、USBメモリーにインストールする予定はないのだが。これを、$HOME/texlive2016portable 以下にインストールした。$HOME は自分のルート。Macの場合、/Users/自分のアカウント になっている。以下、作業内容。texlive2016portable までのパスをTLROOT と略記する。

  • Pathの変更。
    export PATH=/usr/texbin:$PATH
    

    などとし、/usr/texbin は本当のパスへのシンボリック・リンクとする。
    これを変更することで、複数のTeXシステムを使い分けることにした。

    TeXLive2016portableを使う場合。

    ln -s TLROOT/bin/x86_64-darwin  /usr/texbin
    

    今までのuptetexを使う場合。

    ln -s PathToOldTeXSystem/bin  /usr/texbin
    
  • TeXLiveのアップデート。
    パスを通したあと、

    sudo tlmgr update --self --all
    

    として最新版にアップデートする。500個くらいアップデートがあって、けっこう時間が掛かった。

  • ヒラギノフォントへのシンボリック・リンクを作る。
    Homebrewでgsは入れているのだが、リンクされているgsのバージョンが7.07と古かったので、texlive付属のスクリプトで自動的にリンクを作ることができなかった。手動でリンクを TLROOT/texmf-local/fonts/opentype/ 以下に作成する。ファイルが認識できるように sudo texhash する。
  • ヒラギノを埋め込むようにMapを設定。
    以前は手動で行っていたが、今はスクリプトでできるようだ。便利だが、何が行われているのかが分からないのは不安な気もする。

    sudo kanji-config-updmap-sys hiragino-pron
    

    で完了。ログを読むと、updmap-sys は TLROOT/texmf-dist/web2c/updmap.cfgTLROOT/texmf-config/web2c/undmap.cfg を読み込んで、 TLROOT/texmf-config/web2c/updmap.cfg に新たな設定を書き込んだらしい。もっとも、TLROOT/texmf-config/web2c/updmap.cfg は今回新たに作成されているのだが。それを開くと、

    jaEmbed hiragino-pron
    jaVariant -04
    

    の2行からなるファイルだった。

以上で、インストール作業は完了。ターミナルから試してみる。

ln -s TLROOT/bin/x86_64-darwin  /usr/texbin

として、/usr/texbin をTeXLiveのバイナリーに設定。which platex して確認。適当なファイルを作成して、platex sample.tex とすれば、sample.dvi が出来る。次いで、dvipdfmx sample.dvi とすれば sample.pdf が出来る。OKですね。

次の作業は、エディターから使えるようにすること。候補としては、TeXMaker, TeXstudio それから、Sublime Text 3 だが、それは後ほど。

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
		}
	},