Bash on Ubuntu on Windows上でTeXLiveのコンパイル&プレビュー環境を構築する（X Window編）

#やりたいこと
[前回](http://qiita.com/kuro_23/items/e311805301f3b597fcb8)は、Emacsはターミナル上で動かして、PDFファイルのプレビューをWindowsのソフトを呼び出していたけど、EmacsをX Window上で動くようにすれば、PDFファイルもBash on Ubuntuで何とかなるのではないかと考えたのが事の発端。それでSyncTeXのforward searchが使えるようになれば嬉しいな、ということでいろいろ試してみる。

#X Serverのインストール

いろいろあるけど、シンプルそうなので[VcXsrv](https://sourceforge.net/projects/vcxsrv/)をインストールする。スタートアップフォルダに入れておけば自動的に起動するので便利。

##DISPLAY環境変数
```shell-sesshon:.bashrc
export DISPLAY=:0.0
```
VcXsrvを起動して得られる数字に適宜変更する必要はあるけど、普通はこれで問題ないはず。適当にX Windowのアプリケーションを起動してウィンドウが開けば取りあえずはOK。

#Emacsのビルド
UbuntuのパッケージにあるEmacsだとエラーが出てきどうせず、また、[こちら](http://tonop.cocolog-nifty.com/blog/2016/11/bash-on-ubuntu-.html)で紹介されているsnapshotを利用する形だと、表示はできるけどウィンドウサイズ周りの挙動がおかしいので、自分でビルドする。

ビルド自体は[こちら](http://qiita.com/nanasess/items/6b731c933ebcd9b1c95a)を参考に。ポイントとしては、x-toolkitはgtk3以外を選択するということと、D-Busはそのままにしておくということ。configureのオプションはこんな感じでビルドする。あ、あと、[クリップボード周りのパッチ](https://m.reddit.com/r/bashonubuntuonwindows/comments/4tpn5r/running_emacs_master_branch_in_recent_wsl_and/)は当ててある。

```
$ ./configure x86_64-pc-linux-gnu --with-x-toolkit=gtk2 --with-libotf --with-m17n-flt
$ make
$ make install
```

これでドラッグしてウィンドウサイズを変更してもきちんと追従してくれるし、init.elでウィンドウサイズや位置を指定してもその通りに動くようになった(と思う)。

#D-Bus設定
このままだと、D-Busは起動時にエラーが出るし、またEmacsからアプリの起動もできないので、[こちら](https://www.reddit.com/r/Windows10/comments/4rsmzp/bash_on_windows_getting_dbus_and_x_server_working/)を参照して、TCPで通信できるようにする。

```
$ sudo sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf
```

シェルを再起動してからEmacsを起動すればD-Bus周りのエラーは出なくなった。

#X Window上のPDFビューワー

##Evinceのインストール

SyncTeX対応のものはいくつかあるけど、Ubuntuのパッケージだと例えばZathuraはどうもSyncTeXを外しているようなので野良ビルドになる(これやったけどかなり面倒くさい)ので、[Evince](https://wiki.gnome.org/Apps/Evince)をパッケージで入れる。

```
# apt-get install evince
```

##fwdevinceのインストール
[TeX Wiki](https://texwiki.texjp.org/?Evince%2Ffwdevince%2FPython)で紹介されているfwdevinceをインストールする。うちの環境だとPythonは2と3と両方インストールされていて2がデフォルトだったので、必要に応じて[アプリケーションのリンクを変更する](https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux)か、スクリプトファイルの先頭を```/usr/bin/python3```にしておく。

うまく動作しない場合、ライブラリをインストールすれば動くようになるはず。うちの環境だとpyhotn-dbusが入ってなかったので入れる必要があった。

##Emacs上の設定
[YaTeX](http://www.yatex.org/)を利用しているので、[TeX Wiki](https://texwiki.texjp.org/?YaTeX#h118b5e5)を参照して以下のように。

```init.el
(setq YaTeX-inhibit-prefix-letter t)
(setq YaTeX-dvi2-command-ext-alist
      '(("TeXworks\\|texworks\\|texstudio\\|mupdf\\|SumatraPDF\\|Preview\\|Skim\\|TeXShop\\|evince\\|okular\\|zathura\\|qpdfview\\|Firefox\\|firefox\\|chrome\\|chromium\\|Adobe\\|Acrobat\\|AcroRd32\\|acroread\\|pdfopen\\|xdg-open\\|open\\|start" . ".pdf")))
(setq dvi2-command "evince")
(setq tex-pdfview-command "evince")
```
これで、.texファイルが開かれているバッファ上で、```C-c``````C-g```とすればPDFファイルの当該部分を参照してくれるはず。ただし、Evinceは精度がイマイチ。Zathuraはこの点は良い。

#参考
- https://www.reddit.com/r/Windows10/comments/4rsmzp/bash_on_windows_getting_dbus_and_x_server_working/
- https://www.reddit.com/r/emacs/comments/4vxoug/emacs_on_windows_10_anniversary_update/d658nd7/
- https://m.reddit.com/r/bashonubuntuonwindows/comments/4tpn5r/running_emacs_master_branch_in_recent_wsl_and/
- https://linuxconfig.org/how-to-change-from-default-to-alternative-python-version-on-debian-linux
- http://tonop.cocolog-nifty.com/blog/2016/11/bash-on-ubuntu-.html