TeX 2017 から 2019 へ (MacOS Mojave)

これまで BasicTeX 2017 を使っていたので、なるべく既存のものを残しつつ 2019 にアップデートしていきます。当然、TeX Live 2017 のリポジトリは freeze されているので、普通の sudo tlmgr udpate --self --all はできません。

公式ページ (https://tug.org/texlive/upgrade.html) に update の方法が載っているのを発見したので、それにしたがって update していきます。また、この ブログ もとても参考にさせていただきました。個人的な備忘録も兼ねて、公式の手順の後ろに私の環境で何をしたか・何が起きたかを書いておきます。

目次:

アップデート

Step 1

Unix

  • Find the parent directory of the current installation; it's /usr/local/texlive by default.

私の環境では基本的に BasicTeX だけを入れてあるので、 /usr/local/texlive/2017basic/ というディレクトリがあるようです。

Step 2

  • Copy the whole directory 2018 to 2019, preserving symbolic links; for example:cp -a 2018 2019. If you don't understand this, stop here and do a regular installation.

2018 フォルダはないので、とりあえず 2017basic/2019basic/ にコピーします。シンボリックリンクのためにも cp -a オプションをつけておきます。次の手順でも言われているように、万が一のとき戻れるように前のバージョンのフォルダを残しておくのも大事です。もしこれ以降のどこかで詰まったら普通に全消ししてクリーンインストールしようという気持ちで進んでいきます。

Step 3

  • To save some space, you can exclude tlpkg/backups/* or remove them from the 2019/ directory afterwards. (Theoretically, you could rename 2018 to 2019, but we strongly advise against this, since you may lose your existing installation with no good way back.)

素直に従って rm -rf tlpkg/backups/* します。

Step 4

  • If you installed symlinks in system directories (via the installer option or tlmgr path add), remove them now with tlmgr path remove.

これまで tlmgr path add をした記憶はあまりないのですが、一応 remove しておきます。(何も起きませんでした)

Step 5, 6

  • As needed, adjust your PATH in your startup files to point to .../2019/bin/*platform*/ instead of .../2018/....

  • Log out and log in, and confirm that your PATH now has the 2019 directory. This is crucial. Your PATH must use the new location.

手順5で言われているような platform というものは、私の環境では x86_64-darwin のことを指しているようです。とりあえず、まずは PATH に登録されているものを確認します。確かに登録されています。

$ echo $PATH | tr ':' '\n'
...
/usr/local/texlive/2017basic/bin/x86_64-darwin

一応念のため、環境変数tex という文字列を含むものを検索してみます。私の結果では PWDOLDPWDPATH でヒットしました。

$ export -p | grep -i tex

しかしこの中で重要な環境変数はどうやら PATH らしいので、それの更新を行います。作業をしていて気がついたのですが、PATH は「どのディレクトリに TeX をインストールしますか」というのを定めているっぽいので、この手順は大事なようです。

$ export PATH=/usr/local/texlive/2019basic/bin/x86_64-darwin:$PATH

再度確認すると、ちゃんと登録されています。

$ echo $PATH | tr ':' '\n'
/usr/local/texlive/2019basic/bin/x86_64-darwin
...

Step 7, 8

  • cd to your top-level .../2019 directory.

  • Download the latest update-tlmgr-latest.sh and run it like this: sh update-tlmgr-latest.sh -- --upgrade (The extra options are to try to prevent the upgrade from happening unintentionally.)

まずは、tlmgr コマンドそのものをアップデートしていきます。必要に応じて sudo をつけます。

$ wget http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
$ sh update-tlmgr-latest.sh -- --upgrade

Step 9

  • If you don't want to use the default repository (that is, not the automatic CTAN redirection) for downloading the new files, run (as usual): tlmgr option repository *yourrepo*

この手順では、「tlmgr コマンドが、どのオンラインリポジトリからファイルをとってくるか」を設定します。自分に一番近いミラーサイトを知るために、ブラウザで http://mirror.ctan.org/systems/texlive/tlnet にアクセスしてみます。私の場合は JAIST か山形大のウェブサイトに飛んでいくようなので、リダイレクトしたページのリンクをコピーして、下のコマンドを実行します。

$ tlmgr option repository http://ftp.yz.yamagata-u.ac.jp/pub/CTAN/systems/texlive/tlnet/

ここまできたところで、tlmgr がちゃんと動きそうかを確認します。下のように全て 2019 っぽい感じに表示されれば OK です。tlmgr using installation の部分は、ローカル環境のインストール先を示しているらしく、PATH の内容がここに反映されるようです。

$ tlmgr version
tlmgr revision 51555 (2019-07-05 00:23:27 +0200)
tlmgr using installation: /usr/local/texlive/2019basic
TeX Live (http://tug.org/texlive) version 2019

Step 10

  • Run (with patience, it will be downloading all the new material): tlmgr update --self --all

おなじみの sudo tlmgr update --self --all をします。私の環境では 199 個の変更が起きました。

Step 11, 12

  • Remake the lualatex/fontspec cache:luaotfload-tool -fu

  • If you want symlinks in system directories (not recommended), run tlmgr path add.

LuaTeX は使っていないのですが、一応手順11に従っておきます。手順12はスキップしました。

When you are happy with how the new TL is working, if you wish you can remove the old installation by running .../2018/.../tlmgr uninstall (full tlmgr doc). Not recommended, since you might always find a document that doesn't work with the new version, just at the wrong time…

Good luck, and to reiterate from the top, don't do any of this if it doesn't make sense to you. Just do a fresh installation.

テスト

ここで pdflatexuplatex のテストをしたところ、fmt ファイルが違うよと怒られます。

This is pdfTeX, Version 3.14159265-2.6-1.40.20 (TeX Live 2019) (preloaded format=pdflatex)
 restricted \write18 enabled.
---! /usr/local/texlive/2019basic/texmf-var/web2c/pdftex/pdflatex.fmt made by different executable version
(Fatal format file error; I'm stymied)

このサイト によると、いくつかのバイナリが現行の TeX Live と違うのでビルドできないよ、ということらしいです。そこで下のコマンドを実行します。

$ fmtutil-sys --all

これで一応通るようになりました。

蛇足

よく見ると、先ほどのエラーでは、\write18 というものが enabled になっているぞという warning も出ています。What does “restricted \write18 enabled” mean and why does TexLive keep reporting it? によれば write18 は結構気をつけたいものだったのですね……

Emacs のバッファ一覧を作業中のバッファで見たい

Emacs でバッファ一覧を表示するコマンドCtrl-x Ctrl-b を打つと、デフォルトでは、別のバッファに一覧が表示されてしまう設定になっていたのをついに解決しました…!

設定を変更する

Emacs の設定ファイル (~/.emacs.d/init.el~/.emacs など) に以下のような設定を追記します。こうすることで、デフォルトでは list-buffers という動作をしていたものを buffer-menu という動作に上書きできます。

(global-set-key "\C-x\C-b" 'buffer-menu)

設定を反映する

上のような設定をちゃんと反映させるにはいくつか方法がありますが、下の二つが簡単だと思います。

  • 設定ファイルを保存してから、Emacs を再起動する(おそらく自動的に設定ファイルが読み込まれる)
  • Emacs で設定ファイルを編集した場合のみ)設定ファイルを開いた状態で一度保存し、そのまま下のミニバッファに M-x eval-buffer と書いてエンターキーを押す(M-xmac では option キー + x です)

これで設定が反映されたはずです。

動作を確認してみる

例えば、Emacs を立ち上げてすぐの画面(私の設定ではロゴが出ないようになっているのでこの画面なのです)で、Ctrl-x Ctrl-b を打ってみると…

f:id:saphir_jaune:20190831234135p:plain

アクティブなバッファにバッファ一覧が現れました!

f:id:saphir_jaune:20190831234209p:plain

参考記事

stackoverflow.com

iTerm2 で Alt キー + 矢印キーの動作を変更したい

iTerm2 logo

最近ようやく iTerm2 を使い始めました〜。

いろいろカスタマイズできてとても使いやすいのですが、Alt キー( のことです)のデフォルト動作がターミナルと違ったので設定を変更しました。

Alt + ← や Alt + → で [D [C と入力されてしまう

ターミナルでは、 と左右の矢印キーを入力すると単語間を素早く移動できるのが便利でしたが、iTerm2 では [D [C などと入力されてしまいカーソルが思ったように移動してくれません…

iTerm2 での設定

そこで iTerm2 の環境設定から設定をしてみます。

⌘, で環境設定を開いて、 [Profiles] → [Keys] とクリックして、 ⌥→ の行をスクロールして探します。見つかったら、その行をダブルクリックします。 その後、下の表にしたがって入力し、OKボタンを押します。

Key Combination Action Esc+
⌥← Send Escape Sequence b
⌥→ Send Escape Sequence f

これで完了です!環境設定のウィンドウを閉じれば、新しい設定が反映されているはずです。

f:id:saphir_jaune:20190831221017p:plain

f:id:saphir_jaune:20190831221437p:plain

f:id:saphir_jaune:20190831221533p:plain

git submodule を使ってみる

git submodule というのは、とてもざっくり言うと git のリポジトリ入れ子のようにすることができる機能です。ポインタのような感じで、親リポジトリから子リポジトリを指し示すようになっています。 設定は .gitmodules というファイルに記載されています。

おそらく github のページでは下のようなアイコンが表示されているディレクトリが submodule です。 https://octicons.github.com/img/og/file-submodule.png

リポジトリに子リポジトリを登録する

リポジトリで以下のコマンドを実行します。

$ git submodule init # submodule を使う前にこれを言う必要がある
$ git submodule add git@github.com:[ユーザ名]/[子リポジトリ名]

ググるとおそらく一番最初に出てくる、Qiita の記事がとてもわかりやすかったです。 qiita.com

リポジトリが更新されたので、親でもそれを反映したい

リポジトリで下のコマンドを実行します。

$ git submodule update

登録していた submodule を消す

ネットを徘徊したところ、これが一番わかりやすいみたいです。(実際にこのページに行くと、この gist の下にいろんな人が "Thanks!" とメッセージを送りまくっています笑)

Emacs で一行ずつスクロールさせる

Emacs の画面を一行ずつマウスで(もしくはトラックパッドで)スクロールさせる設定を追加してみました。

~/.emacs.d/init.el などの設定ファイルに以下の内容を記入し、Emacs を再起動するとできるようになります。 再起動が面倒であれば M-x eval-buffer としてもよいです。

;; scrolling
(setq mouse-wheel-progressive-speed nil) ;; don't accelerate scrolling
(setq mouse-wheel-scroll-amount '(1 ((shift) . 1))) ;; one line at a time
(setq mouse-wheel-follow-mouse 't) ;; scroll window under mouse

Emacs はデフォルトではまとめてスクロールし、次第にスクロール速度が上がっていく設定になっているようなので、

  • マウスでのスクロールを一行ずつに、そして
  • 高速化しない

という設定を書いてあげます。

スクロールの設定には

  • キーボードのコマンドによるスクロール
  • マウス(もしくはトラックパッド)によるスクロール

があるので、それぞれ別々に設定してやる必要があるようです。

www.emacswiki.org

~/.ssh/config で簡単に ssh ログインする

毎回 長い ssh コマンドを打つのは面倒なので、config ファイルで簡単に管理したいと思います。 ~/.ssh/config に設定を記入していきます。

ssh ホスト名 だけでログインしたい

Host myserver
     User     user1
     HostName address1

config ファイルを上のように書いておくと、

$ ssh myserver

というコマンドで ssh <user1>@<address1> と同様の動作になります。

ポートフォワーディング

Host myserver
     User user1
     HostName address1
     LocalForward port1 address2:port2

これで ssh user1@address1 -L port1:address2:port2 と同様の動作になります。

LocalForward については man page ssh_config section 5ポートフォワーディング - Qiita を参照。

多段 ssh

myserver1 を経由して myserver2 に直接ログインしたいとき、下のように書くことができます。

ProxyCommand についてググったところ -WC のようにオプションが2つ一緒についている場合が あったのですが、-C は圧縮オプションで、必須ではないようです。

ssh-agent を利用しているなら、ターミナルで ssh -A と打つかわりに ForwardAgent yes と書きます。

Host myserver1
     User user1
     HostName address1
     ForwardAgent yes
     
Host myserver2
     User user2
     HostName address2
     ProxyCommand ssh -W %h:%p myserver1
     ForwardAgent yes

多段 ssh については、多段ssh設定のまとめ多段SSHやポートフォワーディングを &#39;.ssh/config&#39; に書く - Qiita を参照。

git diff をブラウザできれいに表示できる pretty-diff

git diff はよく使いますが、GitHub のようにブラウザできれいに表示させて読みたくなることがあります。 pretty-diff というコマンドがとても便利だったので備忘録として書いておきます。

github.com

このコマンドをターミナルで叩くと、下のようにブラウザで diff が表示されます(作者の方の GitHub のページより)。

https://cloud.githubusercontent.com/assets/39191/10147714/8c358910-65e4-11e5-8e59-e1526ef674cd.png

インストール

インストール方法は npm で global に install します。-g オプションをつけると /usr/local/bin/... あたりにインストールしてくれます。

$ npm install -g pretty-diff

使い方

使い方は普通の git diff と全く同じで、git diff に渡していた引数をそのまま pretty-diff に渡せばOKです。

例えば、[COMMIT_A] というコミットと [COMMIT_B] というコミットを比べたければ、下のようにします。

$ pretty-diff [COMMIT_A] [COMMIT_B]

すると、既定のブラウザが立ち上がって diff を HTML として出力してくれるようになります。