あらまし
latexmk
とTeXファイルの分割、その他の細かいTipsをまとめています。
はじめに
修士論文を書き終えました。日本語です。卒業に伴い、TeXを触る機会がたぶんなくなります。せっかくTeXについても色々勉強したのにこのまま忘れてしまうのはもったない気がしました。そこで、これまで自分が資料や卒論、修論を書く上で、そして日本語で書く上で色々と調べたりした小技をまとめておくことにしました。
私の環境はOSはM1チップのMacBook Proで、brew
を使ってTeXLive
1をインストールし、TeX使っています。コンパルはuplatex
を使い、dvi->pdfはdvipdfmx
、参考文献にはbiblatex
を使い、ドキュメントクラスはujreport
です。確認はしていませんが、ある程度他の環境でも使えるともいます。
TeXの処理系について
そもそもTeX
は処理系を表し、LaTeX
はプログラミング言語でいうライブラリに相当する物です2 。ドキュメントクラス(\documentclass{ujarticle}
など)を指定するだけで\section{XXX}
などで綺麗に図版してくれるのはこれのおかげです。いろいろなバージョンが存在しますが、近年日本語ではuplatex
、platex
、が一般的です。p~
は日本語対応、u~
はunicodeに対応させたものを表します。LuaLaTeX
も最近では第三の選択肢としてでてきました3。ですが、大学や学会からのテンプレートはuplatex
、platex
を前提としているものがまだ多く、やはりuplatex
などを使ったほうが可搬性が高そうです。
日本語対応パッチ
\usepackage{XXXXX}
でパッケージを読み込むことができますが、日本語対応していないパッケージも多いです。そんな時は日本語対応させてくれるpx~
パッケージを追加で読み込みます。例えば、hyperref
に対し、 pxjahyper
などです。このような組み合わせはたくさんあり、全部覚えておくことは不可能です。(そもそもすぐにわかるエラーがなければどれが日本語非互換か気づかないこともあります。)
これに対応した非常に便利なパッケージがplautopatchです4。\RequirePackage{plautopatch}
を\documentclass{XXXXXX}
より前に読み込んでください。
***** List of packages loaded by `plautopatch': *****
plarray, plsiunitx, pxjahyper.
*****************************************************
logファイルにこのような出力がありました。気がつかずhyperref
以外にも$2$つ非互換なパッケージを使っていたようです。ちなみに、明示的にpxjahyper
を読み込んでもlogファイルにこの様な記述がされます。
latexmk
を使おう
main.tex
ファイルをコンパイルしようと思うと、
uplatex main.tex ## tocファイル(目次)、auxファイル(相互参照など)などが重要
biber main ## bblファイル(biblatexの中間ファイル)と、blgファイル(biberのlogファイル)ができます。
uplatex main.tex ## texファイル、tocファイル(目次)とbblファイル(文献)とauxファイル(相互参照)があれば図版されるようです。
uplatex main.tex ## ですが、複数回実行しないと正しいファイルができないようです。
dvipdfmx main.dvi ## dviファイルからpdfファイルに変換
これだけコマンドを叩く必要があります。めっちゃめんどいです。しかも、logファイルやらなんやら、中間ファイルが大量に作られます。この状況を解決してくれるのがlatexmk
です5。
「Latexmkは、LaTeX文書をコンパイルするプロセスを完全に自動化します。」5。また、基本的にはTeXLiveに含まれているので、基本的には追加でインストールする必要もありません。
準備
使用のためにはホームディレクトリに.latexmkrc
ファイルを作り、設定を書いておきます。
latexmkrc
の置く場所について補足
先ほどホームディレクトリに置く($HOME/.latexmkrc
)と書きましたが、別な選択肢があります。また、ディレクトリローカルな設定を作ることもできます。
ユーザーの設定ファイルは$HOME/.latexmk
または$XDG_CONFIG_HOME/latexmk/latexmkrc
が読み込まれます。環境変数$XDG_CONFIG_HOME
が設定されていない場合、自動的に$HOME/.config
に設定されるので、代わりに$HOME/.config/latexmk/latexmkrc
を利用することができます。
また、latexmkを実行するディレクトリ(以後カレントディレクトリとします。)にも.latexmkrc
またはlatexmkrc
ファイルを作ることで、上記のファイルに加えてカレントディレクトリローカルな追加の設定を書くことができます。構成変数の設定が衝突した場合はホームディレクトリの設定が優先されるようです。また、カレントディレクトリにlatexmkrc
、.latexmkrc
の両方のファイルがあった場合先に見つけた方のみが有効のようです。私の環境では.latexmkrc
が有効でした。(ls -a
で上に出てくる順番だと思います。)
設定ファイルの例
# 使用するコマンドの設定
$latex = 'uplatex %O -synctex=1 -halt-on-error -interaction=nonstopmode %P';
# biblatexは裏でbiberを使っているので設定が必要です。
$biber = 'biber'
# dvipdf設定
$dvipdf = 'dvipdfmx %O -o %Z%R.pdf %S'; #カレントディレクトリにpdfファイルを出力したい場合は%Zを消してください。任意のディレクトに出力したい場合は%Zの部分を変更してください。
# jobnameの設定:役割がよくわからない人は設定しない方が無難です。
#$jobname = 'great_thesis';
# 最大繰り返し回数
$max_repeat = 5;
# 1~5まで存在し,dvipdfの設定を使うためには3を指定する。
$pdf_mode = 3;
# 中間ファイルやログファイルの出力場所
$aux_dir = "build/"; #auxファイルとfdb_latexmkだけこちら
$out_dir = "build/"; #
# pdfビューワーの設定
$pdf_previewer = 'open -a skim'; #macでskimを使用する場合。環境に合わせて変更。
# texファイルのプリアングルになにか追加したい時とかに使えます。
#$pre_tex_code = \RequirePackage{plautopatch} #この設定は個人的にはおすすめしません。
このファイルを用意した後、実行するには、
latexmk main.tex
と端末上で打ち込むだけです。一気にpdfファイルが作られます。
役に立つlatexmk
のオプションとして、-g
、-pv
、-pvc
、-silent
、-c
などを紹介しておきます。
latexmk -g -pv main.tex
などlatexmk
に続いて入力し、複数指定することができます。
オプション | |
---|---|
-g | 通常変更のない場合はコンパイルされませんが、強制的に全て再コンパイルします。 |
-pv | pdfビュワーが立ち上がり、出力したpdfファイルを見ることができます。 |
-pvc | -pvの効果に加えて、texファイルやbibファイル(確認していませんが各種中間ファイルが編集された場合もおそらく)が変更された場合に自動的に再コンパイルします。 |
-silent | 端末常に表示されるログが少なくなります。 |
-c | コンパイル終了後にaux、log、bbl、blg、dviが取り除かれます。 |
latexmkにはまだまだ山のようにオプションが存在します5。
.latexmkファイルの記述について
.latexmk
ファイル中の記述にして説明していきます。.latexmkrc
はperlで書かれるので、文字列を指定する場合は'
シングルクオートで括ってください。ちなみに、スカラーの変数は$
から始まり、配列は@
から始まります。
構成変数($latex
などについて)6
構成変数 | |
---|---|
$latex | 実行するlatex のエンジンとオプションが設定できます。後ほど設定しているオプションの詳細を説明します。 |
$biber | 実行するbiber のコマンドを設定できる。 |
$dvipdf | 実行するコマンドの設定ができる。%O などは後から説明します。 |
$jobname | jobの名前を設定できる。出力されるファイルの名前が変わったりする。 |
$out_dir | 出力されたファイルが保存されるディレクトリ。 |
$aux_dir | auxファイルとfdb_latexmkファイルはこっちに保存される。 |
$pdf_previewer | pdfビュワーの設定。【設定した値】 ファイル名.pdf が実行される模様 |
$max_repeat | #無限ループの可能性があるとlatexから抜け出すまでの最大の実行回数。既定値は5で、全ての正常な場合をカバーしています。 |
$pre_tex_code |
%P や%U などと合わせて使う。texのコードに追加ができる。$pre_tex_code = '\AtBeginDocument{\input{【inputしたいファイルのパス】}}'; などとすると特定のページを1ページ目に挿入できたりします。(所属組織の情報とか入れる場合とかに役立ちそうです。\AtBeginDocument はプリアングルに記述するコマンドです。プリアングル終了後に、(\begin{document}後)命令を実行します。)絶対に日本語文書しか書かないという人は$pre_tex_code = \RequirePackage{plautopatch} とかもありかもしれませんが、設定したこと自体を忘れそうなので私はやっていません。 |
プレースホルダー(%O
などについて)
latexmkのドキュメントから引っ張ってきました。和訳時にドキュメントの内容から変更したり、追加して説明しています。プレースホルダーはこれで全てです。
プレースホルダー | |
---|---|
%A |
メインのtexファイルのファイル名(拡張子なし)です。%R と異なり、jobnameやthw-jobenameオプション、$jobname 構成変数の設定で影響されません。 |
%B |
現在のコマンドのファイルのファイル名(拡張子なし)です。例えば、dviファイル main.dvi からpdfファイルを作るdvipdfmxの場合、mainとなります。 |
%D |
目的ファイルのファイル名です。(つまり、main.dvi ファイルからpdfファイルを作るときのpdfファイル、main.pdf です。) |
%O |
オプションです。latexmkが設定するオプションをlatexやbiber、dvipdfmxのどこに挿入するかを指定することができるようです。%S を併用しないとファイル名の入力を求められるようにないります。 |
%P |
構成変数$pre_tex_code が設定されている場合、main.tex ファイルの冒頭に設定した値が挿入されます。(正確には逆で$pre_tex_code \input{main.tex} となるようです。)$pre_tex_code が設定されていない場合は%S と同じです。 |
%R |
主なファイルのファイル名(拡張子なし)です。-jobname オプションや構成変数$jobname を指定した場合、指定した値に変更されます。latexmkrcはカレントディレクトリに設定することで、ディレクトリローカルな設定にすることが出来るので、主なファイル名はmain.tex としつつ、出力されるpdfファイルや中間ファイル、ログファイルの名前を変更するとかできます。 |
%S |
ソースファイルのファイル名(拡張子あり)を指します。(dviファイルをpdfに変換するときのdviファイル名です。) |
%T |
主要なTeXファイルの名前です。即ちmain.tex を表します。 |
%U |
$pre_tex_code が設定されているとき、そのまま置き換えられます。%P と異なり、main.tex の挿入処理をしません。$pre_tex_code が設定されていないときは、null文字になります。(即ち消えます。) |
%Y |
中間ファイルの出力ディレクトリ名($aux_dir )に置き換えられます。$out_dir が設定され、$aux_dir が設定されていない場合、$aux_dir は$out_dir と同じ値に設定されます。 |
%Z |
出力ファイルの出力ディレクトリ名($out_dir )に置き換えられます。 |
$pdf_mode
について
$pdf_mode | |
---|---|
0 | pdfを作成しない |
1 | $pdflatex で指定したコマンドでpdfを作成する。 |
2 | $ps2pdfで指定したコマンドでpdfを作成する。 |
3 | $dvipdfで指定したコマンドでpdfを作成する。dviファイルを作成する。 |
4 | $lualatexで指定したコマンドでpdfを作成する。 |
5 | $xelatex and xdvipdfmxで指定したコマンドでpdfを作成する。 |
latexのオプション7
$latex
の値で、実行するlatex
のエンジンとオプションが設定できます。今回$latex
指定しているオプションを説明します。
$latex = 'uplatex %O -synctex=1 -halt-on-error -interaction=nonstopmode %P';
オプション | |
---|---|
-synctex=1 | SyncTeX8を有効にしています。pdfファイルとtexファイルを自由に行き来できる便利な機能です9。.synctex.gzファイルが作られるようになります。 |
-halt-on-error | 処理中最初のエラーが出た時にストップします。 |
-interaction | コンパイル中のエラーなどにどう対処するのかを指定します。 |
-interaction
で指定できるmodeは4つあります。それぞれどのような動作か解説します。
オプション | |
---|---|
errorstopmode(既定値) | エラーがあるたびに停止し、ユーザーの介入を求めます。未定義コマンドの場合などは、エンターを押しまくると最後まで実行してくれます。(修正をすることができるみたいですが、あまり使い方がわかっていません。)xを押すと終了します。 |
scrollmode | ファイル不足やキーボード入力があった場合にTeXが停止します。あんまり使い方分かりません。(どこ読めばわかるかもわからないので誰か教えてください。)とりあえず<*>が出ているときは「Ctr + C」で抜け出して、?になるので同じくxを入力すると終われる。 |
nonstopmode | 端末上にエラーメッセージが表示されますが、エラーで止まりません。errorstopmodeでエンターを押しまくった場合と同じような動きになります。 |
batchmode | ターミナルには何も表示されません。(実際には$3$行くらい出力されます。) |
-halt-on-error
と-interaction=nonstopmode
はsyntax errorのときは似たような動作になります。
ですが、-halt-on-error
は\input{xxxx}
などでファイルが見つからないなど場合は正しいファイル名を入力すると訂正されて実行することができます。エラーがでたときに、errorstopmodeでx
を入力する場合と同じような動きだと思います。
一方で、-interaction=nonstopmode
はファイルが見つからない場合はそのまま通過します。基本的に最後まで実行されるようです。
両方指定しておけば、コンパイル中に一切入力する必要はありません。どのみちファイルを修正するので、両方指定してコンパイルを止めています。
dvipdfのオプション10
$dvipdf
の値で、dviファイルからpdfファイルを作成します。オプションの解説をします。
$dvipdf = 'dvipdfmx %O -o %Z%R.pdf %S';
-o
で出力ファイル名を指定できます。ファイル名はパスを指定できるので、任意のディレクトリに出力させることができます。現在の設定では、%Z
で$out_dir
の値を指定することで、他の各種出力ファイルと同じディレクトリに、%R
を使うことで、構成変数$jobname
またはlatexmkのオプション-jobname="xxx"
で設定したファイル名、どちらも指定していない場合はlatexmkに与えたファイル名でpdfファイルを出力しています。
他にも山のように様々なオプションが存在します10。
ファイルを分割しよう
困難は分割せよ。
ちょっとしたメモ書きや、課題を書く分には1つのファイルにまとめて書いてしまう方が楽ですが、ある程度長くなると一つのファイルにまとめておくのが大変になります。また、何度も同じ内容を書く場合はTeXのソースファイルとして書いておき、使い回せるととても楽です。複数人で同じ一つの文書を作成する場合などもファイルを適切に分割する必要がでてきます。
幸いなことにLaTeXにはファイルを読み込むコマンドが用意されています。説明のために、以下に示す様なディレクトリと関連ファイルがあるとします。
.
├─── main.tex
└── contents
├── body1.tex #文書の内容1
└── body2.tex #文書の内容2
また、latexmk
またはuplatex
は、main.tex
をソースファイルとしています。即ち、
latexmk main.tex #またはuplatex main.tex
です。このmain.tex
のことをルートファイルと呼びます。
コマンド紹介
ファイルの分割に関連するコマンドは以下の4つです。
コマンド | |
---|---|
\input{xxx} | texファイルであればどこでも使えます(main.tex 、body1.tex 、body2.tex )。このコマンドを実行した箇所にhoge.tex ファイルの内容をそのまま挿入します。入り子は私の環境では14まで許されました。 |
\endinput | 読み込まれるファイルに記述します(body1.tex 、body2.tex の適切な場所)。このコマンド以後の記述はコメントの様に扱われます。詳しい挙動は未調査です。数式のalign環境中に記述すると、align環境終了までは表示されたり、itemize環境中に記述するとエラーがでたりします。実際にはファイルの最後まで読み込んでいるので、\if 、\fi などを使った分岐を行うこともできます。問答無用で記述した箇所からコメントにならないという意味で% とは違った使い道がたくさんありそうです。 |
\include{xxx} | ルートファイル(main.tex )のdocument環境下でのみ利用可能です。\clear(dobule)page をしたのちファイル内容を挿入します。\clear(dobule)page は、ページをまたげない図や表の配置を決めさせます。重要なことは、改ページされるということです。
|
\include & \includeonly | includeonlyコマンドは\include コマンドと組み合わせて扱います。ルートファイルのプリアングル(\begin{document} の前)に書きます。includeで指定したファイルを実際読み込むのかを制御します。どの様に使うのか補足をします。 |
ファイル名について
\input{xxxx}
などで指定するファイル名は拡張子.tex
をつける必要がありません。\input{body1}
となっていた場合、最初にbody1.tex
をカレントディレクトリで探し、見つからなかった場合にbody1
(拡張子無し)を探します。\input{body1.tex}
となっている場合は.tex
をくっつけずにそのままbody1.tex
を探してくれます。
また、xxxの部分にはパスを指定することができます。相対パスでも、絶対パスでも指定可能です。
相対パスの場合はカレントディレクトリ(latexmk
を実行するディレクトリ)を起点に記述してください。ルートファイルがある場所でも、input{xxx}
を記述したファイルのある場所でもありません。
\input{contents/body1} % `.` で `latexmk main.tex` を行う場合
\includeonly
について
大きなtexのファイル群を相手にコンパイルをするとよくて数秒、長いと何分(出版される様な本なら何時間もかかるかもしれない)も時間がかかります。そこで、一部分だけをコンパイルしようと、\input
や\include
コマンドをコメントアウトすると、目次や参照、引用文献などが正しく処理されません。そんな時に使えるのが\includeonly
コマンドです。
\includeonly
コマンドはカンマで区切って、読み込むファイルを指定します。main.tex
、contents/body1.tex
、contents/body2.tex
の具体的な記述を載せていきます。私の環境で実際のコンパイル可能なことを確認しています。
\documentclass{ujreport}
\includeonly{%
contents/body1,
contents/body2
}
\begin{document}
\include{contents/body1}
\include{contents/body2}
\end{document}
\chapter{本編}
\section{本編だよ}
素晴らしい本編 \ref{test:1}
\chapter{2つ目の章だよ!}
\section{実験のための節だよ!}
実験のためのページ参照\label{test:1}
この状態でlatexmk
を使ってコンパイルすると参照(\ref{test:1}
)は、2.1
と出てきます。この状態で、contents/body1.tex
、contents/body2.tex
を変えずに、main.tex
の記述のみ以下の様に変更します。
\documentclass{ujreport}
\includeonly{%
contents/body1,
%contents/body2
}
\begin{document}
\include{contents/body1}
\include{contents/body2}
\end{document}
すると、第2章の記述は丸々出力されなくなります。ところが、参照(\ref{test:1}
)は正しく2.1
を挿しています。
必ず一度contents/body2
を含む形でコンパイルし、auxファイルを生成してください。単にmain2.tex
のファイルをコンパイルしても参照は正しく処理されません。
付録にはappendix
パッケージを使おう
付録をつけるときはappendix
パッケージを読み込んで使うと便利です。読み込まずとも\appendix
コマンドで章の数字をリセットしてAlphabetにしてくれます。ですが、目次に追加しようとするとappendix
と出てきます。この名前を自由に変更したい場合などはappendix
を使うと便利です。
\renewcommand{\appendixname}{付録} %%ここを付録と変更することで「付録 A」などと変更されます。デフォルトでは「appendix A」。
\renewcommand{\appendixtocname}{付録} %%目次のappendix開始ページに表示される文字列を変更できます。
\renewcommand{\appendixpagename}{付録} %%\appendixpage で表示されるページにでる文字列を変更できます。
\appendix %%appendixを開始します。
\appendixpage %%付録開始時に \appendixpagename と書かれたページを1枚追加します。
\addappheadtotoc %%目次に付録が始まるページを追加してくれます。
\chapter{付録ですよ}
\section{一つ目の付録}
素晴らしい付録
徹底的に変更したい場合
このままの設定だと、「付録 A」とアルファベットが出てくるのが気に入らないという人がもしかしたらいるかもしれません。カウンターをイロハはに変更する方法を一応紹介します。
カウンターをいろはで表示するマクロは存在しないので、まずはいろはマクロを作ります11。プリアングル(\begin{document}
の前)に挿入してください。
\makeatletter
\def\@kiroha#1{%
\ifcase#1\or イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or チ\or リ\or ヌ\or ル\or ヲ\or
ワ\or カ\or ヨ\or タ\or レ\or ソ\or ツ\or ネ\or ナ\or ラ\or ム\or
ウ\or ヰ\or ノ\or オ\or ク\or ヤ\or マ\or ケ\or フ\or コ\or エ\or テ\or
ア\or サ\or キ\or ユ\or メ\or ミ\or シ\or ヱ\or ヒ\or モ\or セ\or ス\else\@ctrerr\fi}
\def\kiroha#1{\expandafter\@kiroha\csname c@#1\endcsname}%イロハ
\makeatother
これでTeXのカウンターをいろはで表示することができます。使用方法は簡単です。
\renewcommand{\the【カウンター名】}{\kiroha{【カウンター名】}
とすれば良いです。\the【カウンター名】
はカウンター【カウンター名】
を表示するコマンドです。
これを踏まえると、先ほどのTeXのソールファイルは以下のようになります。
\renewcommand{\appendixname}{付録} %%ここを付録と変更することで「付録 A」などと変更されます。デフォルトでは「appendix A」。
\renewcommand{\appendixtocname}{付録} %%目次のappendix開始ページに表示される文字列を変更できます。
\renewcommand{\appendixpagename}{appendixpagename} %%\appendixpage で表示されるページにでる文字列を変更できます。
\appendix %%appendixを開始します。
\renewcommand{\thechapter}{\iroha{chapter}}
\appendixpage %%付録開始時に \appendixpagename と書かれたページを1枚追加します。
\noappendicestocpagenum %% 目次のページ数が表示されなくなります。
\addappheadtotoc %%目次に付録が始まるページを追加してくれます。
\chapter{付録ですよ}
\section{一つ目の付録}
素晴らしい付録
必ず\appendix
コマンドの後に\renewcommand{\thechapter}{\iroha{chapter}}
を挿入してください。\appendix
コマンドが出力を\renewcommand{\thechapter}{\Alph{chapter}}
をしてしまうからです。
ただし、この方法では前後の空白などが若干気持ち悪くなります。これ以上は長くなる上に、せっかくappendix
パッケージを読み込んだ意味がなくなってしまう気がするので、チャプター名や、セクション名を変更する方法がまとまっているこちらの記事を参考に変更してみてください。
参考文献にはBibLaTeX
を使おう
参考文献をつける方法も様々あります。自分でで記述する方法12もありますが、正直とても大変なので基本的にはおすすめできません。bibtex
やbiblatex
を使うと、一度ファイル名.bib
ファイルという参考文献リストを作っておくことで、文章中で引用した文献のみ参考文献リストとして表示しくくれたり、自動で並び変えたりしてくれるので、可搬性が高くなります。また、bibtex
よりもbiblatex
の方がカスタマイズ性が高いので、私はbiblatex
を使用しました。
ファイル名.bib
ファイルの作り方
【ファイル名】はなんでも構いません。仮にreference.bib
とします。
Google ScholarなどでBiBTeX
の情報をコピーし、reference.bib
に貼るだけです。(Google Scholarの情報は間違っていることが非常に多いので、使う場合は確認が必要です。学会の公式ページなどでcite
->bibtex
などがあると思うので、可能ならばそこからコピーしましょう。)
@book{高木貞治2010定本解析概論,
title={定本解析概論},
author={高木貞治},
year={2010},
publisher={岩波書店}
}
ファイル名.bib
の読み込みと引用の仕方
tex
ファイルと同じディレクトリにreference.bib
を置いてください。(別ディレクトリに置く場合はファイルを分割しようを参考にしてください。)\begin{document}
の前に次の$2$行を加えてください。
\usepackage{biblatex}
\addbibresource{reference.bib}
文中の引用は
\cite{高木貞治2010定本解析概論}
などと行います。ファイルreference.bib
の{
の始まってすぐから,
までが引用のキーワードとなっており、ここは任意の文字列で構いません。そして、文献リストを表示したい箇所で(document環境)
\addcontentsline{toc}{chapter}{参考文献} %%目次に参考文献を追加できます。
\printbibliography[title=参考文献]%%文献リストの表示
を入れることで参考文献を表示してくれます。オプションの[title=参考文献]
が無い場合はタイトルはBibliography
となります。
biblatex
パッケージを読み込む時にさまざまなオプションをつけることができます。
\usepackage[citestyle=numeric,sorting=none,bibstyle=ieee, giveninits=true,maxnames=8,minnames=3]{biblatex}
-
style=numeric
-
\cite
を使って引用したときに[1]
などとなります13。
-
-
sorting=none
- 文献を引用した順番で文献リストができます13。
-
bibstyle=ieee
- IEEEの形式で参照できます。
- 使えるスタイル
-
giveninits=true
- 名前がイニシャルだけになります。14
-
maxnames=8,minnames=3
-
maxnames
以上の著者がいるときminnames
まで表示し、et al.
とします。14
-
おわりに
本記事では、主に日本語の文章を意識してuplatex
+biblatex
+dvipdfmx
をlatexmk
を使ってコンパイルをする方法をまとめました。
また、筆者の知見としてTeXファイルを分割するコマンドについて述べ、具体的なディレクトリの構成についても提案しています。
細かいTipsとして日本語対応パッチや、appendixパッケージの使用、bibファイルをGoogleスカラ(bibの記述は間違いが多いので、必ず確認すること)などを使って作成することを推奨しています。
最後に付録として今回紹介した設定のソースファイルやコンパイルした結果を画像として載せています。
付録
ソースコード
最後に資料などを書くときのために用意しているテンプレートを載せて終わりにしたいと思います。もう少し色々設定していますが今回紹介した内容に関連がある物を基本的に載せています。(例えば、図を入れる用のディレクトリ./figure
も用意していますが、表示していません。)
ディレクトリ構成
.
├── config
│ └── my-macros.tex # マクロをまとめて書いています。汎用性の高いものはシンボリックを張り、同期しつつ使いまわしています。もっと汎用性が高くなったらpackageとしてまとめるべきみたいです。
├── contents # `input`や`include`するファイル、参考文献のファイルをまとめています。
│ ├── body1.tex
│ ├── body2.tex
│ └── reference.bib
├── .latexmkrc #ディレクトリローカルな設定を記述しています。
└── main.tex
$HOME
└── .config
└── latexmk
└── latexmkrc
latexmkrc
#!/usr/bin/env perl
# shebang
# 構成変数
# latex設定
$latex = 'uplatex %O -synctex=1 -halt-on-error -interaction=nonstopmode %P';
# biblatexのバックエンドでbiberが動くので設定
$biber = 'biber'; # -u -U --output_safechars'; #コメントアウトのオプションは文字コードをutf8に対応させるものですが、基本的にデフォなのでいらない設定です。
# dvipdf設定
$dvipdf = 'dvipdfmx %O -o %Z%R.pdf %S';
# 最大繰り返し回数
$max_repeat = 5;
# pdfの出力形式を合わせる
$pdf_mode = 3;
# 中間ファイルとか出力ファイル出力先
$aux_dir = "build/";
$out_dir = 'build/';
# pdfビューワーの設定
$pdf_previewer = 'open -a skim %Z%R.pdf';
#!/usr/bin/env perl
# shebang
#$pre_tex_code= '\AtBeginDocument{\thispagestyle{empty}付け加えだよ}';
$jobname = 'great_thesis';
main.tex
ルートファイル。
\RequirePackage{plautopatch}
\documentclass{ujreport}
\usepackage{appendix}
\usepackage{amsmath}
\input{config/my-macros}
\includeonly{ %
contents/body1,
contents/body2
}
\title{素晴らしい題名}
\author{素晴らしい著者}
\date{素晴らしい日}%\date{\today}とするとコンパイルした日の日付になります。
\usepackage[citestyle=numeric,sorting=none,bibstyle=ieee, giveninits=true,maxnames=8,minnames=3]{biblatex}
\addbibresource{contents/reference.bib}
\begin{document}
% 参考文献のための設定
\maketitle %タイトルページの作成
\tableofcontents %目次の作成
\include{contents/body1}
\include{contents/body2}
\appendix
\renewcommand{\thechapter}{\kiroha{chapter}}
\noappendicestocpagenum
\appendixpage
%\addappheadtotoc
\chapter{付録をつける}
\section{付録ですよ}
素晴らしい付録
%参考文献
\addcontentsline{toc}{chapter}{参考文献}
\printbibliography[title=参考文献]
\end{document}
読み込んでいるファイル
% いろはのカウンター
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\makeatletter
\def\@kiroha#1{%
\ifcase#1\or イ\or ロ\or ハ\or ニ\or ホ\or ヘ\or ト\or チ\or リ\or ヌ\or ル\or ヲ\or
ワ\or カ\or ヨ\or タ\or レ\or ソ\or ツ\or ネ\or ナ\or ラ\or ム\or
ウ\or ヰ\or ノ\or オ\or ク\or ヤ\or マ\or ケ\or フ\or コ\or エ\or テ\or
ア\or サ\or キ\or ユ\or メ\or ミ\or シ\or ヱ\or ヒ\or モ\or セ\or ス\else\@ctrerr\fi}
\def\kiroha#1{\expandafter\@kiroha\csname c@#1\endcsname}%イロハ
\makeatother
% appendixの設定をします。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\renewcommand{\appendixname}{付録}
\renewcommand{\appendixtocname}{付録}
\renewcommand{\appendixpagename}{付録}
\chapter{本編}
\section{本編だよ}
素晴らしい本編\cite{高木貞治2010定本解析概論}です。
\ref{test:1}
\iftrue
\begin{align}
x^2 + 4x +4 &=0\\
{(x + 2)}^2 &=0\\
\endinput
x &= -2
\end{align}
endinputによって表示されないよ。
\else
ここもif文的に表示されないよ。
\fi
\chapter{2つ目の章だよ!}
\section{実験のための節だよ!}
実験のためのページ参照\label{test:1}
@book{高木貞治2010定本解析概論,
title={定本解析概論},
author={高木貞治},
year={2010},
publisher={岩波書店}
}
出力されるファイル
謝辞
本記事は著者が修士論文を書き終えて、テンションがあがったのでこれまでに知ったことをまとめておこうと書いたものです。
なぜか書くにあたって、英語の文章をたくさん読んだり、実験したりして二度と使わない予定のTeXに関してより詳しくなってしまいました。
しかし、疑問に思ったことは大抵文書にまとめられていたので、マニュアルやドキュメント、man
コマンド、help
を作ってくれた偉大な先駆者たちに感謝します。
また、某リッチテキストエディタを使って修論を書いたら発狂していたと思うので、 TeX、LaTeX、pLaTeXを作って下さっている方々に心から御礼申し上げます。
あと、間違っていることもあるかと思うので、仮にこれから指摘してくださる方がいらっしゃったら深くお礼申し上げます。
参考文献
-
TeX Wiki
- TeXに関するWikiで、調べたらなんでも出てきます。
-
日本語 LaTeX の新常識 2021
- 日本語LaTeXに関する最近の動向が書いてあり非常に勉強になりました。
-
K.Kodama's page
- LaTeXなどのTipsを紹介しています。
-
jsreportのchapter名を変更する
- 付録のカウンターをいろはに変更したい人は確認してみてください。
-
LaTeX入門
- ちょっとしたコマンドの確認で重宝します。
-
CTAN Comprehensive TEX Archive Network
- TeXのパッケージがまとまっています。
-
BibLATEX
- 英語とドイツ語のドキュメントしかない。
-
TM23FOREST.COM
- BibLaTeXのはじめ方が綺麗にまとまってました。tlmgrなどについてもあってとても勉強になりました。
-
biblatex のオプションの解説
- 探したなかでBibLaTeXのオプションが一番まとまって紹介されていました。