Edited at

【必見】Atomで作る快適な論文執筆TeX環境【Mac】【卒論】【LaTeX】

More than 1 year has passed since last update.


この記事について

自分が卒業論文を書いていたときに使っていた執筆環境がけっこう便利だと思ったので共有してみようと思いました。

参考になれば幸いです。

Macで日本語で文章を書くことを前提としています。(uplatexとupbibtexを使います)

英語での執筆にも対応できるので適宜変更してください。


この記事を読んでできること

qiita-tex4.gif



  • .tex から .pdf への自動コンパイル/プレビュー

  • 「、」「。」から「,」「.」への自動変換

  • 引用(bibtex)、章立て(chaptersectionなど)の自動補完

  • スニペット(equationtableなど)の充実

-> 卒業論文のテンプレート


brewの導入

まず準備としてHomebrewというMacのパッケージマネジャーをインストールします


ターミナルで以下の1行を実行すればOK

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


brewで必要なものをインストール

brew install ghostscript imagemagick


brew caskで必要なものをインストール

アプリ
説明

Atom
Github製のエディタ

BasicTex
最小限のLatex環境パッケージ(MacTexをインストール済みの方は不要)

Skim
高機能PDFビュアー

もう既にAtomやSkimがインストールがされていたり、MacTexがインストール済みの方は必要なものだけをインストールしてください。

どれもインストールされていない方は以下の1行のターミナルで実行してください。

brew cask install atom skim basictex --appdir=/Applications


Atomの設定

Atomにはパッケージといって独自の機能を追加する仕組みがあります。


Atomでインストールするパッケージ

Atomで、[Preferences]/[Settings] -> [Install]と進んで、以下の2つのパッケージをインストールします

パッケージ
説明

language-latex
latexのシンタックスハイライトとスニペット

latexer
引用や章立ての自動補完

ターミナルで以下の1行を実行しても上記のパッケージをインストールすることができます

apm install language-latex latexer


ここまで

equationtableなどのスニペット補完と参照の自動補完ができるようになりました。

qiita-tex5.gif


Skimの設定

次にSkimの設定をします。[Preferences] -> [Sync]でまずファイル更新の監視を有効にします。

Screen Shot 2016-10-02 at 8.05.26 PM.png

しかし、これだけだとtexファイルの更新のたびに「更新しますか?」というダイアログが出てしまうので、以下の1行をターミナルで実行して自動更新させるようにします

defaults write -app Skim SKAutoReloadFileUpdate -boolean true


uplatexのインストール、設定

latexplatexxelatexでもそれぞれ用途にあった環境を使えばいいのですが、

ここでは日本語の処理をUnicodeで行なうように拡張されたplatexであるuplatexを使いたいと思います。

basictexをインストールしただけだと、uplatexやupbibtexが使えないので追加でパッケージをダウンロードします

sudo tlmgr update --self --all

sudo tlmgr install uplatex latexmk collection-langjapanese


フォント埋め込み

以下のサイトが役に立ちます。

まとめると


cd /usr/local/texlive/2016basic/texmf-dist/scripts/cjk-gs-integrate
sudo perl cjk-gs-integrate.pl --link-texmf --force
sudo mktexlsr
sudo kanji-config-updmap-sys hiragino-elcapitan-pron


latexmk

latexmkはその名の通り、latexmakeを担ってくれるコマンドです

そのコマンドの設定ファイルが.latexmkrcというファイルです

rcrun commandsの略のようです。* linux - What does the 'rc' in .bashrc, etc. mean? - Super User

latexmkにより、texからpdfの自動更新ができるようになります。


.latexmkrcの作成、設定

【GUI】

任意のテキストエディタを開いて、以下の~/.latexmkrcのスクリプトをコピーして、.latexmkrcという名前でホームディレクトリに保存してください。(ホームディレクトリはDocumentsとかDesktopとかいうディレクトリがあるところです)

【CUI】

以下の~/.latexmkrcのスクリプトをコピーして、

pbpaste > ~/.latexmkrc

を実行します。



~/.latexmkrc

#!/usr/bin/env perl

$latex = 'uplatex -synctex=1 -halt-on-error %O %S';
$bibtex = 'upbibtex %O %B';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex -U %O -o %D %S';
$max_repeat = 5;
$pdf_mode = 3; # generates pdf via dvipdfmx

# Prevent latexmk from removing PDF after typeset.
# This enables Skim to chase the update in PDF automatically.
$pvc_view_file_via_temporary = 0;

# Use Skim as a previewer
$pdf_previewer = 'open -a /Applications/Skim.app'; # Skimの場所を指定する


$latex内のuplatexをplatexやxelatexにすることでコンパイルの指定ができます


「、」「。」の変換

論文を書くとき句読点は全角の「,」「.」で書かなければいけない(?)のですが、Google日本語入力で設定を変更したりすると普段LINEやTwitterなどを使うときに不便です。その都度設定を変更するのも面倒です。

~/.latexmkrcではグローバルな設定を行なうのですが、.texが置いてあるディレクトリに.latexmkrcを置くとディレクトリ内の設定が優先されます。

全てのtexファイルで句読点変換をしたいとは限らないので、句読点自動変換をしたいディレクトリだけ変換のスクリプトを書いた.latexmkrcを入れるといいと思います。

sedというコマンドを使って、texファイルの中身の「、」「。」を「,」「.」に変換しています。


ディレクトリ内の.latexmkrc

#!/usr/bin/env perl

$latex = "find . -type f -name '*.tex' | xargs sed -i '' -e 's/、/,/g' -e 's/。/./g'; uplatex -synctex=1 -halt-on-error %O %S";


ディレクトリ内の構成例

.

├── .latexmkrc
└── sample.tex


latexmkの使い方

ここまでできたらあともう少しです。


コンパイル

ただコンパイルしてpdfを出力するだけ

latexmk sample.tex


閲覧

コンパイルしてpdfを確認する

latexmk -pv sample.tex


監視(自動更新)

ターミナルで以下の1行を打つと、Atomでtexファイルに更新があるたびにpdfの更新が行なわれます。

latexmk -pvc sample.tex


クリーン

中間生成ファイルを削除したいときに使います。

latexmk -C sample.tex


まとめ

これでMacでAtomを使ったTeXの執筆環境が整ったと思います。

自分が文章を書くときは、まずAtomでディレクトリを開き、そのあと監視を行なうコマンドを打ちます


作業の流れ

cd (texファイルがあるディレクトリ)

atom .
latexmk -pvc hoge.tex


補足について

ここまでである程度の環境が揃ったと思うのですが、texのプロジェクトについて思うことや付け足したいことをメモとして残しておきます。


ディレクトリ構成

1つのディレクトリに全てのファイルを置いておくのは小さいプロジェクトでは不便ではないと思いますが、

卒論など章や節の多くなるプロジェクトだと目的のファイルを見つけるのが面倒になります。

なので、序論、先行研究、手法、実験、結論ごとにディレクトリを分けると見通しがよくなります。

これはさすがにやりすぎかもしれませんが、適宜自分にあった粒度で調整してください。

章ごとや節ごとにディレクトリを分けるとgit管理もしやすくなります。

.

├── .gitignore
├── .latexmkrc
├── Makefile
├── backmatter
│   ├── acknowledgement.tex
│   └── main.tex
├── conclusion
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── experiment
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── fig
├── frontmatter
│   ├── abstract.tex
│   └── main.tex
├── introduction
│   ├── main.tex
│   ├── motivation.tex
│   ├── objective.tex
│   ├── organization.tex
│   └── preface.tex
├── main_bibliography.bib
├── method
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── misc
├── related-research
│   ├── hoge.tex
│   ├── main.tex
│   └── piyo.tex
├── thesis.sty
└── thesis.tex


latexerの設定

latexerでは\ref\cite内の文字列を自動補完してくれるのですが、デフォルトでは補完候補の検索範囲は元ファイルと同階層のファイルのみです。

なので、ファイルの先頭に

%!TEX root = ./thesis.tex

or

%!TEX root = ../thesis.tex

のように元のファイルを指定する必要があります。


サンプルプロジェクト


Makefile

以下のようなMakefileを作っておくとlatexmkのコマンドを覚えておかなくても

make watchmake cleanとするだけで所望の処理を行なうことができます。


Makefile

INPUT=thesis.tex

OUTPUT=thesis

// VIEWER=open -a /Applications/Skim.app

all:
latexmk -jobname=$(OUTPUT) $(INPUT)

clean:
latexmk -CA -jobname=$(OUTPUT) $(INPUT)
find . -name *.aux -delete
find . -name *.log -delete
rm *.bbl

view:
latexmk -pv -jobname=$(OUTPUT) $(INPUT)

watch:
latexmk -pvc -jobname=$(OUTPUT) $(INPUT)



画像の埋め込み

texに画像を埋め込むときは、epsに変換しないといけないと言われますが、最近ではそのままpdf埋め込みで良いようです。

@zr_tex8rさんからコメントをいただきました。

以下のように、pngでもjpgでもそのまま読み込めるようです。


PNG画像を読み込む

\includegraphics[width=4cm]{image.png}



次の区切り線まで読み飛ばしてください

pngやjpgをpdfに変換するには、ImageMagickを使います。

brew install imagemagick

convert hoge.png hoge.pdf

画像があるディレクトリに移動して、

以下のコマンドを実行すればフォルダ内全ての画像を変換できます。

for img in $(ls)

convert $img $(basename $img $(echo ${img#*.}))pdf

【実行例】

Screen Shot 2016-10-02 at 10.05.51 PM.png



mediabb

画像を埋め込むときにいちいちサイズ指定をするのはめんどくさいのでmediabbというパッケージを使います。


Skimを使わずにAtomだけでPDFプレビューまで完結させる方法


  • pdf-view

というパッケージを追加でインストールします

しかし、そのままだと日本語の表示ができないので、


~/.atom/packages/pdf-view/node_modules/pdfjs-dist/build にある pdf.js の適当なところ(27行目くらい)に、以下の2行を追加する。

PDFJS.cMapUrl = "../cmaps/";

PDFJS.cMapPacked = true;


Atomでplatex->dvipdfmxチェーンを実装する話 | 愛のらくがき帳

上記の設定を追加します。


Tables Generator

このサイトはGUIで表を作るとlatexやmarkdownの書式に合わせてテキストを書き出してくれるのでとても便利です。


参考

@tuvistavie Danielさんのプロジェクトを大変参考にさせていただきました。


長くなってしまったので補足を別記事に分けるかもしれません。