WSL+TeX Live環境を一から構築する
tech TeX vscode
Posted: 2020-04-27 Updated: 2021-02-02

個人的な環境構築のログです。

WSL の環境を再構築することにした。これを機に、今まで Windows 上で構築していた TeX 環境も WSL 上に移動することにする。

目標

  • WSL をインストールするとデフォルトでは C ドライブ配下に置かれてしまうが、これを変更する。今回は D:\wsl\Ubuntu1804 に置く
  • tmux の環境も整える。コピペを簡単にできるように
  • Vim も最低限のコピペができるように程度には設定する

手順

WSL のインストール

  • WSL は一度使っていたので、Windows 側の初期設定は省略
  • WSL を Microsoft Store からインストールしてそのまま使っていると、C ドライブ配下に WSL のファイルが溜まっていってしまう。筆者の PC の C ドライブの残量が心許なくなってきたので、これを別の場所に移動したい。そのためにはDDoSolitary/LxRunOfflineを使う
  • このレポジトリの説明にも書かれているように、Chocolatey や Scoop 経由あるいは直接バイナリファイルをダウンロードして lxrunoffline をインストールする
    • 自分は Chocolatey を使うのでchoco install lxrunoffline。PowerShell は管理者権限で立ち上げておく
    • インストールが完了したら PowerShell からlxrunoffline versionで動作確認。今回は v3.4.1 だった
    • lxrunofflineとオプションなし叩けば、サポートされているアクション一覧が見られる
  • WSL のディストリビューションとして、今回は Ubuntu-18.04 を使う。これを Microsoft Store からインストールする
  • インストールが完了したら起動し、ユーザー名とパスワードを入力したら exit
  • PowerShell を管理者権限で立ち上げる
  • lxrunoffline listでインストールされたか確認。Ubuntu-18.04 があるかをチェック
    • アンインストールするときはlxrunoffline uninstall -n Ubuntu-18.04
    • wslconfig /listで WSL として認識されているかチェックする
    • 必要であればwslconfig /setdefault Ubuntu-18.04でデフォルトのボリュームに設定する。lxrunoffline set-default -n Ubuntu-18.04でもよい
  • インストールした Ubuntu-18.04 を移動する
    • lxrunoffline move -n Ubuntu-18.04 -d D:\wsl\Ubuntu1804
    • もし「WSL が起動中で移動できない」といった旨のエラーが出た場合には、wsl -t Ubuntu-18.04で止める
  • lxrunoffline summary -n Ubuntu-18.04でディレクトリが変更されているか確認
  • WSL が起動するかチェックする。デフォルトに設定してあればwsl。そうでなければlxrunoffline run -n Ubuntu-18.04
  • 確認できたらexit。PowerShell も終了させる

WSL の初期設定

  • WSL を起動する。Powershell から立ち上げるもよし。自分は Windows Terminal を使っている
  • sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
  • sudo apt update
  • sudo apt upgrade
  • sudo apt install language-pack-ja
  • sudo dpkg-reconfigure tzdata
    • タイムゾーンを Asia->Tokyo に設定
    • dateで確認できる
  • chmod や環境変数の設定

    • echo $PATHすると、Windows の環境変数まで引き継いでしまっていることが分かる。パスにスペースを含んでいたりして不具合の元になるので、これを修正したい
    • sudo vim /etc/wsl.conf
    • 次を記入して終了
    [automount]
    options = "metadata"
    
    [interop]
    appendWindowsPath = false
    
  • 保存したらexit

  • 環境変数の設定の変更を反映させるために、PowerShell からwsl -t Ubuntu-18.04で確実に終了させる

  • その後 WSL に再ログイン。echo $PATHで変わっているかチェック

tmux のインストール

  • 画面分割したり、画面上の文字列をコピーしたりしたいので、tmux を使う
  • sudo apt install git automake bison build-essential pkg-config libevent-dev libncurses5-dev
  • 作業用ファイルを作って移動
    • mkdir ~/temp
    • cd ~/temp
  • git clone -b 3.1 https://github.com/tmux/tmux
  • cd tmux
  • sh autogen.sh
  • ./configure && make
  • sudo make install
  • tmux -Vで確認。今回は 3.1 をインストールした
  • インストールに使ったファイルを削除
    • cd ../
    • rm -rf ./tmux
  • tmux の設定

    • vim ~/.tmux.conf。次のように記述して保存(普段自分が使っている設定)
    set-option -g default-shell /bin/bash
    
    # tmuxを256色表示できるようにする
    set-option -g default-terminal screen-256color
    set -g terminal-overrides 'xterm:colors=256'
    
    # キーストロークのディレイを減らす
    set -sg escape-time 1
    
    # ウィンドウのインデックスを1から始める
    set -g base-index 1
    # ペインのインデックスを1から始める
    setw -g pane-base-index 1
    
    # 設定ファイルをリロードする
    bind r source-file ~/.tmux.conf \; display "Reloaded!"
    
    # prefixキーをC-qに変更
    set -g prefix C-w
    unbind C-b
    
    # ステータスバーをトップに配置する
    set-option -g status-position top
    
    # 左右のステータスバーの長さを決定する
    set-option -g status-left-length 90
    set-option -g status-right-length 90
    
    # #P => ペイン番号
    # 最左に表示
    set-option -g status-left '#H:[#P]'
    
    # Wi-Fi、バッテリー残量、現在時刻
    # 最右に表示
    set-option -g status-right '#(wifi) #(battery --tmux) [%Y-%m-%d(%a) %H:%M]'
    
    # ステータスバーを1秒毎に描画し直す
    set-option -g status-interval 1
    
    # センタライズ(主にウィンドウ番号など)
    set-option -g status-justify centre
    
    # vimのキーバインドでペインを移動する
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R
    
    # vimのキーバインドでペインをリサイズする
    bind -r H resize-pane -L 5
    bind -r J resize-pane -D 5
    bind -r K resize-pane -U 5
    bind -r L resize-pane -R 5
    
    # \ でペインを縦分割する
    bind \\ split-window -h
    # - でペインを縦分割する
    bind - split-window -v
    
    # マウス操作を有効にする
    set-option -g mouse on
    # bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
    
    # コピーモードを設定する
    # コピーモードでvimキーバインドを使う
    setw -g mode-keys vi
    bind -T copy-mode-vi v send -X begin-selection
    bind -T copy-mode-vi V send -X select-line
    bind -T copy-mode-vi C-v send -X rectangle-toggle
    bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel 'xsel -bi'
    bind -T copy-mode-vi Y send-keys -X copy-pipe 'xsel -bi'
    
    # ペインボーダーの色を設定する
    set -g pane-border-style fg="green"
    set -g pane-border-style bg="black"
    # アクティブなペインを目立たせる
    set -g pane-active-border-style fg="white"
    set -g pane-active-border-style bg="yellow"
    • クリップボードへのコピーをできるようにしていく。ついでに GUI を使うための設定をする
    • sudo apt install xsel
    • GUI のために X410 を使う。無料の VcXsrv でも大体同じ動作が再現できるはず
    • X410 を Windows 側で立ち上げておく。自分は自動起動の設定をしている
    • X410 の設定をしていく
    • echo '[ -z $DISPLAY ] && export DISPLAY=127.0.0.1:0.0' >> ~/.bashrc
    • source ~/.bashrc
    • echo $DISPLAYで確認
    • sudo apt install dbus-x11
    • sudo dbus-uuidgen --ensure
    • dbus-launch --exit-with-x11
    • xeyes を使って、動作チェック
    • sudo apt install x11-apps
    • xeyesを起動して目を回せれば成功
    • ここまでできれば、tmux でもコピーができるようになっている
    • もしできなければ X410 や WSL を再起動してみる

フォントの設定

  • GUI で日本語が文字化けしてしまう。そこで Windows からフォントを持ってくる
    • GUI の表示テストとして自分は lxterminal を使った。これは次のようにしてインストール
    • sudo apt install lxterminal
    • lxterminal &で起動すると、ターミナルが開かれる。適当にディレクトリを移動してみて、日本語を含むファイル名がある場所などを覗いてみる。すると文字化けしている
  • sudo apt install fontconfig
  • sudo ln -s /mnt/c/Windows/Fonts /usr/share/fonts/windows
  • sudo fc-cache -fv
  • この後、lxterminal で表示チェック

vim の設定

  • 今回は取り敢えずクリップボードへのコピーができる程度に
  • sudo apt install vim-gtk
  • vim ~/.vimrcで次を入力して保存(これも普段の自分が使っている設定)
  " setting
  "文字コードをUFT-8に設定
  set fenc=utf-8
  " 入力中のコマンドをステータスに表示する
  set showcmd
  " バックアップファイルを作らない
  set nobackup
  " スワップファイルを作らない
  set noswapfile
  " 編集中のファイルが変更されたら自動で読み直す
  set autoread
  " バッファが編集中でもその他のファイルを開けるように
  set hidden
  " ヤンクしたときに自動的にクリップボードに送る
  if has('nvim')
      " xclipをインストールしているとする
      set clipboard+=unnamedplus
  else
      " vim-gtkでvimをインストールしているとする(xselも必要?)
      set clipboard=unnamedplus
  endif

  " 見た目系
  " 行番号を表示
  set number
  " 現在の行を強調表示
  " set cursorline
  " インデントはスマートインデント
  set smartindent
  " ビープ音を可視化
  set visualbell
  " 括弧入力時の対応する括弧を表示
  set showmatch
  " ステータスラインを常に表示
  set laststatus=2
  " 不可視文字を可視化
  set list listchars=tab:+-

  " 操作系
  " コマンドラインの補完
  set wildmode=list:longest
  " 行末の1文字先までカーソルを移動できるように
  set virtualedit=onemore
  " 折り返し時に表示行単位での移動できるようにする
  nnoremap j gj
  nnoremap k gk
  " ESC連打でハイライト解除
  nmap <Esc><Esc> :nohlsearch<CR><Esc>

  inoremap <silent> jj <ESC>

  " Tab系
  set tabstop=4
  set shiftwidth=0
  set softtabstop=4
  set smarttab

  " 検索系
  " 検索文字列が小文字の場合は大文字小文字を区別なく検索する set ignorecase
  " 検索文字列に大文字が含まれている場合は区別して検索する
  set smartcase
  " 検索文字列入力時に順次対象文字列にヒットさせる
  set incsearch
  " 検索時に最後まで行ったら最初に戻る
  set wrapscan
  " 検索語をハイライト表示
  set hlsearch

  " シンタックスハイライトの有効化
  syntax enable
  • これで Vim でヤンクしたときにクリップボードへコピーされる

TeX 環境構築

  • 殆ど次のページの通りに進める。解説はそちらを参照
  • sudo の設定
    • vim ~/.bashrcして次を追記: alias sudo='sudo env PATH=$PATH'
    • source ~/.bashrc
    • aliasで追加されているか確認
  • cd ~/temp
  • wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
  • tar -zxvf install-tl-unx.tar.gz
  • cd install-tl-20200426/
    • ディレクトリの名前は適宜合わせる
  • sudo ./install-tl
    • 画面が表示されたら, Iと一文字入力してインストールを始める
    • 1 時間ぐらいかかった
  • whereis texlivetexlive: /usr/local/texliveと確認
  • 不要になったファイルを削除する
    • cd ~/temp
    • rm install-tl-unx.tar.gz
    • rm -rf install-tl-20200426/
  • パスを設定する
    • vim ~/.profileで次を追記 sh PATH="/usr/local/texlive/2020/bin/x86_64-linux:$PATH" MANPATH="/usr/local/texlive/2020/texmf/doc/man:$MANPATH"
    • source ~/.profile
    • echo $PATHで変更確認
  • texlive-dummy の設定
    • sudo apt install equivs
    • wget http://www.tug.org/texlive/files/debian-equivs-2020-ex.txt
    • 手順に沿ってequivs-buildをしたいが、fakerootまわりで実行が失敗する。次を実行して対処
    • sudo update-alternatives --set fakeroot /usr/bin/fakeroot-tcp
    • equivs-build debian-equivs-2020-ex.txt
    • 前行で生成された.deb ファイルをインストールしようとするとパッケージ不足のエラーが出たので、追加しておく
    • sudo apt install freeglut3
    • sudo dpkg -i texlive-local_2020-1_all.deb
    • これでダミーの設定は終わり。不要になったファイルを削除しておく
    • rm debian-equivs-2020-ex.txt
    • rm texlive-local_2020-1_all.deb
  • ガイドに沿ってファイルの確認をしてみる
    • sudo updatedb
    • locate beamer | grep texmf | less
  • tlmgr のアップデート
    • sudo tlmgr option repository http://mirror.ctan.org/systems/texlive/tlnet
    • sudo tlmgr update --self
    • sudo tlmgr update --listで確認
    • もしこのとき ‘skipping forcibly removed package ’ といったエラーが表示されていたとする. このときビルドが上手くいかないことがある。次のように対処
    • sudo tlmgr update --reinstall-forcibly-removed --all
    • 再び確認してエラーがなくなっていることを確認する
  • フォントの設定は後回しにして、.tex ファイルから PDF ファイルが生成できるのかテストしてみる

    • PDF ビューアーとして zathura を使ってみる。そのためにインストール
    • sudo apt install zathura
    • 適当にテスト用ファイルを作る

    • cd ~/temp

    • vim test.texして次を記入

      \documentclass[uplatex]{jsarticle}
    
      \begin{document}
          テスト用のファイルです.
          \begin{enumerate}
              \item $f \colon X \to Y$,
              \item $f (x) = \sin (x^2 + 1)$.
          \end{enumerate}
      \end{document}
  • uplatex test.tex

  • dvipdfmx test.dvi

  • zathura test.pdf

    • zathura は Vim のキーバインドで操作ができる。j で下方スクロール、k で上方スクロール、q で終了など
  • これにて最小限のセッティングは完了!

  • vscode で作業したときには、Remote WSL から今回のディストリビューションに接続し、LaTeX Workshop をリモートインストールするなりして、ビルドする

参考

このエントリーをはてなブックマークに追加