feature image

2018年5月14日 | ブログ記事

TeX環境の紹介

この記事は私がで文書を書いているときの環境について紹介するために書いた記事です。
導入方法も加えて説明しているのでよければ活用していただきたいと思います。

環境

今回は多くの人が使っているWindows10で、Ubuntuを入れることでの環境を構築しています。

Ubuntuのインストール

スタートボタンを開いてコントロールパネルをクリックします。
control
プログラムを押して、プログラムと機能のWindowsの機能の有効化または無効化を押します。
program
program_function
Windows Subsystem for Linuxを選択してOKを選択します。
wsl
インストールが始まるので待ちましょう(再起動することになります)。

再起動したらスタートボタンを押してMicrosoft Storeを開きます。
MS
右上の検索でUbuntuと検索してこのアプリをインストールしてください。
Ubuntu
インストールして起動すると「Installing, this may take a few minutes…」と表示されます。「Installation successful!」と表示されたあとに、Ubuntu上で使用するユーザー名とパスワードが求められるので適切に設定してください。

エディタの設定

エディタはneovimを使っていくことにします。

次のコマンドを行うことでneovimをインストールすることができます。パスワードが求められますがこれは初めに設定したパスワードを入力してください。

$ sudo add-apt-repository ppa:neovim-ppa/stable
$ sudo apt update
$ sudo apt install neovim

Pythonに依存したプラグインをこの後入れるので以下のコマンドも実行します。

$ sudo apt install python-dev python-pip python3-dev python3-pip

neovimをインストールしたので次は設定をします。以下のコマンドを実行してneovimを起動させてください。

$ mkdir -p ~/.config/nvim
$ nvim ~/.config/nvim/init.vim

neovimにはモードというものがあります。
とりあえずノーマルモードとインサートモードとコマンドモードというものを紹介します。

ノーマルモードとは、主にカーソルの移動に使い、インサートモードは文字を打つのに使い、コマンドモードは保存をしたりneovimを終了させるときに使うコマンドです。

ノーマルモード

hを押すと左に移動し、jを押すと下に移動し、kを押すと上に移動し、lを押すと右に移動します。
またiを押すことでインサートモードへ、:(コロン)を押すとコマンドモードへなります。

インサートモード

文字を打ったらその通りに書けます。Escを押すとノーマルモードに戻ります。

コマンドモード

保存したり終了したくなったりしたときにはノーマルモードのときに:を押すとコマンドモードに入ります。
保存するときにはwを押してからEnterを押すと保存することができ、neovimを終了するときにはqを押してからEnterを押すと終了することができます。保存して終了するときにはwqを押してEnterを押すとでき、強制終了したいときにはq!を押してEnterを押すとできます。

一応最低限に必要なことは述べましたが他にも便利なコマンドを知りたければ調べるとでてくるので確認してください。

init.vimに次のように書きます。
コピペする際にはコマンドモードで:set pasteを実行して、インサートモードで右クリックをするようにしてください。

if &compatible
  set nocompatible
endif

" reset augroup
augroup MyAutoCmd
  autocmd!
augroup END

" dein settings {{{
" dein自体の自動インストール
let s:cache_home = empty($XDG_CACHE_HOME) ? expand('~/.vim') : $XDG_CACHE_HOME
let s:dein_dir = s:cache_home . '/dein'
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
if !isdirectory(s:dein_repo_dir)
  call system('git clone https://github.com/Shougo/dein.vim ' . shellescape(s:dein_repo_dir))
endif
let &runtimepath = s:dein_repo_dir .",". &runtimepath
" プラグイン読み込み&キャッシュ作成
let s:toml_file = fnamemodify(expand('<sfile>'), ':h').'/dein.toml'
if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir)

  " プラグインマネージャー
  call dein#add('Shougo/dein.vim')

  " 補完
  call dein#add('Shougo/deoplete.nvim')
  call dein#add('Shougo/neosnippet.vim')
  call dein#add('Shougo/neosnippet-snippets')

  call dein#add('cohama/lexima.vim')

  call dein#end()
  call dein#save_state()
endif
" 不足プラグインの自動インストール
if has('vim_starting') && dein#check_install()
  call dein#install()
endif
" }}}

set nowritebackup
set nobackup
set noswapfile
set number
set encoding=utf-8
set ambiwidth=double

" deopleteの設定
let g:deoplete#enable_at_startup = 1

" Plugin key-mappings.
" Note: It must be "imap" and "smap".  It uses <Plug> mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)

" SuperTab like snippets behavior.
" Note: It must be "imap" and "smap".  It uses <Plug> mappings.
"imap <expr><TAB>
" \ pumvisible() ? "\<C-n>" :
" \ neosnippet#expandable_or_jumpable() ?
" \    "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

" For conceal markers.
if has('conceal')
  set conceallevel=0 concealcursor=niv
endif

" Please add below in your vimrc
call lexima#add_rule({'char': '$', 'input_after': '$', 'filetype': 'tex'})
call lexima#add_rule({'char': '$', 'at': '\%#\$', 'leave': 1, 'filetype': 'tex'})
call lexima#add_rule({'char': '<BS>', 'at': '\$\%#\$', 'delete': 1, 'filetype': 'tex'})

上で書いたものはneovimを起動する際に読み込んで勝手に実行してくれるもので、自分でコマンドやキーバインドを定義することができるものです。またneovimの機能を拡張するための追加のプログラム(プラグインと呼ばれています)もここに書いています。ここではShougoさんの作ったdein.vimというプラグインマネージャーを使っています。

一回neovimを終了させてまた実行をするとプラグインのインストールが始まります。
最後に[deoplete] deoplete failed to がでますが、これはPythonとの連携がうまくいっていないためです。

neovimを終了させて次のコマンドを打ちます。

$ pip3 install neovim

インストールが終わったらneovimを起動して:UpdateRemotePluginsを実行することで正常に動くことができます。

の設定

まずをインストールするために次のコマンドを実行します。
時間はかかりますがこれだけで簡単にインストールすることができます。

$ sudo apt install texlive-full

実行

main.texという名前で次のファイルを作ってください。

\documentclass{jsarticle}
\begin{document}    
こんにちは,\TeX !
\[ \int dx = x + C . \]
\end{document}

インストールが正常に行われていれば次のコマンドを実行するとPDFが出力されます。

$ platex main.tex
$ dvipdfmx main.dvi

というわけでUbuntuでの開発ができるようになりました。

latexmkの設定

毎回platexとdvipdfmxでコンパイルとPDF出力をするのはめんどうですよね?
そこでこれを解決するためにlatexmkというものを使います。

latexmkは文書を作成するのに必要な回数分タイプセットしてくれるものです。
をよく使う人なら分かると思いますけど,の文書で\ref, \pageref, \eqref等を使ってページ,章,節,図,表,数式などを参照するとき,タイプセットを1回行うだけでは正しい出力が得られません。

latexmkはこれも解決してくれます。

latexmkの設定として~/.latexmkrcに次のように書きます。

#!/usr/bin/perl

$latex = 'platex -kanji=utf-8 -synctex=1 %S';
$dvipdf = 'dvipdfmx -p a4 %S';
$bibtex = 'pbibtex';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = 3;
$pdf_update_method = 2;
$pdf_previewer = '"/mnt/c/Program Files/SumatraPDF/SumatraPDF.exe" -reuse-instance %O %S';
$max_repeat = 5;

$pvc_view_file_via_temporary = 0;

PDFビューアーに関してですがここではSumatraPDFというものを参照にします。PDFが更新される度に表示も更新されるのでの文書を書く人にはおすすめします。

使い方としては次のコマンドをすることでPDFを出力することができます。

$ latexmk main

また以下のコマンドを使用することで中間ファイルを削除することができます。

$ latexmk -c main

また次のコマンドが非常に強力です。

$ latexmk -pvc main

このコマンドを実行することでPDFを出力し、それをプレビューします。更にmain.texを監視させて、何か更新があるとその度に再度コンパイルしてPDFを出力します。

フォントの埋め込み

これまでPDFファイルを作っていきましたが、このPDFファイルにはフォントが埋め込まれていません。
個人で使う分には問題はありませんが、他の人にPDFを渡すと場合によっては文字化けが発生する可能性があります(特に日本語の文字化けが起きやすいです)。PDFファイルにフォントを埋め込んでおくと、ファイルを読むユーザーのシステムに同じフォントがインストールされていなくてもPDFを作成した際のフォントで表示されます。

実際には以下のコマンドを実行しておくとフォントの心配は無くなるかと思います。

$ sudo kanji-config-updmap-sys ipaex

neovimはいいぞ

ここから先は布教も兼ねて自分の環境について紹介をします。

自動コンパイル

先ほど強力だと述べたlatexmk -pvcですがinit.vimに次のように書きます。

autocmd! BufRead *.tex :call jobstart('latexmk -pvc')

これをすることによって.texファイルをneovimで開くたびに自動コンパイルをしてPDFで出力してくれます。

テンプレート

.texファイルを作り始めるたびに毎回

\documentclass{jsarticle}
\begin{document}

\end{document}

と書き始めるのはめんどうだと思いますよね?そこでinit.vimに次のように書きます。

autocmd! BufNewFile *.tex 0r ~/.vim/template/tex.txt

これをすることによって.texを新規作成する度に~/.vim/template/tex.txtに書いてあるものが読み込まれるようにしています。自分は諸々の設定をしているので気が付いたらテンプレートが現在100行を超えていました(100行もあるのを毎回打ってなんかいられないですよね)。

補完

エディタの設定をする際にinit.vimに補完系のプラグインを入れてもらいました。

ここまでneovimを使った人なら気づいた人もいるかもしれませんが補完機能がついてたと思います。これはdeoplete.nvimというプラグインによって動いています。

またスニペット機能もついています。
スニペット機能は簡単に言うと決まった構文を素早く挿入できる機能です。

neovim

1個目の方は箇条書きに関する構文です。これはitemizeと打った後に(Control + K)を押すと箇条書きに必要な構文が書かれます。
2個目の方は図の配置に関する構文です。これはfigureと打った後に(Control + K)を押して何かしらの文字を打って(Control + K)というのを繰り返しています。こうすることで図の挿入に必要な構文が書かれます。

感想・体験談

自分が初めてをやろうとしたときは、TeXworksというものをインストールしました。しかしこの方法でやろうとしたときインストールするのに丸1日かかってしまいました。しばらくはこれを使っていました。

ある日一回訳あってwindowsのクリーンインストールを実行したことがあります。このときにの環境が消えてしまいました。再度TeXworksを導入するのは丸1日かかるしやりたくなかったためUbuntuを用いてインストールしました。初めはめんどうな点が多すぎるという感想でした。この機能が欲しいなと思って調べてみたり友人に聞いてみたりして、自分が使いやすいようにしました。最後に述べた自動コンパイル機能やテンプレートの読み込み、補完はTeXworksにはなかったため、今ではTeXworksのときより快適に文書の作成が快適になりました。

この環境をみていいなと思った皆さん是非やってみてください!

hatasa-y icon
この記事を書いた人
hatasa-y

数学をしています。最近はTeXで遊んでいたりしている。

この記事をシェア

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

関連する記事

2022年3月29日
課題・レポートの作成、何使う?【新歓ブログリレー2022 21日目】
aya_se icon aya_se
2023年5月5日
部内SNSのVimクライアントもどきを作ってVim†完全に理解した†話
kamecha icon kamecha
2020年3月19日
Ubuntuの環境構築備忘録【新歓ブログリレー2020 11日目】
manyato icon manyato
2023年9月14日
Emoji Prefix with your `core.editor`
Ras icon Ras
2019年11月27日
Org modeでレポートを書こう
Fourmsushi icon Fourmsushi
2020年9月29日
MarkdownとPandocとLatexmkで楽してレポートを書く
d_etteiu8383 icon d_etteiu8383
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記