9
11

More than 1 year has passed since last update.

TeXで修論を書く

Last updated at Posted at 2022-02-09

あらまし

latexmkとTeXファイルの分割、その他の細かいTipsをまとめています。

はじめに

修士論文を書き終えました。日本語です。卒業に伴い、TeXを触る機会がたぶんなくなります。せっかくTeXについても色々勉強したのにこのまま忘れてしまうのはもったない気がしました。そこで、これまで自分が資料や卒論、修論を書く上で、そして日本語で書く上で色々と調べたりした小技をまとめておくことにしました。

私の環境はOSはM1チップのMacBook Proで、brewを使ってTeXLive1をインストールし、TeX使っています。コンパルはuplatexを使い、dvi->pdfはdvipdfmx、参考文献にはbiblatexを使い、ドキュメントクラスはujreportです。確認はしていませんが、ある程度他の環境でも使えるともいます。

TeXの処理系について

そもそもTeXは処理系を表し、LaTeXはプログラミング言語でいうライブラリに相当する物です2 。ドキュメントクラス(\documentclass{ujarticle}など)を指定するだけで\section{XXX}などで綺麗に図版してくれるのはこれのおかげです。いろいろなバージョンが存在しますが、近年日本語ではuplatexplatex、が一般的です。p~は日本語対応、u~はunicodeに対応させたものを表します。LuaLaTeXも最近では第三の選択肢としてでてきました3。ですが、大学や学会からのテンプレートはuplatexplatexを前提としているものがまだ多く、やはりuplatexなどを使ったほうが可搬性が高そうです。

日本語対応パッチ

\usepackage{XXXXX}でパッケージを読み込むことができますが、日本語対応していないパッケージも多いです。そんな時は日本語対応させてくれるpx~パッケージを追加で読み込みます。例えば、hyperrefに対し、 pxjahyperなどです。このような組み合わせはたくさんあり、全部覚えておくことは不可能です。(そもそもすぐにわかるエラーがなければどれが日本語非互換か気づかないこともあります。)

これに対応した非常に便利なパッケージがplautopatchです4\RequirePackage{plautopatch}\documentclass{XXXXXX}より前に読み込んでください。

logファイル
***** 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で上に出てくる順番だと思います。)

設定ファイルの例

$HOME/.config/latexmk/latexmkrc
# 使用するコマンドの設定
$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.texbody1.texbody2.tex)。このコマンドを実行した箇所にhoge.texファイルの内容をそのまま挿入します。入り子は私の環境では14まで許されました。
\endinput 読み込まれるファイルに記述します(body1.texbody2.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.texcontents/body1.texcontents/body2.texの具体的な記述を載せていきます。私の環境で実際のコンパイル可能なことを確認しています。

main.tex
\documentclass{ujreport}
\includeonly{%
    contents/body1,
    contents/body2
}
\begin{document}
    \include{contents/body1}
    \include{contents/body2}
\end{document}
contents/body1.tex
\chapter{本編}
\section{本編だよ}
素晴らしい本編 \ref{test:1}
contents/body2.tex
\chapter{2つ目の章だよ!}
\section{実験のための節だよ!}
実験のためのページ参照\label{test:1}

main.png
main2.png

この状態でlatexmkを使ってコンパイルすると参照(\ref{test:1})は、2.1と出てきます。この状態で、contents/body1.texcontents/body2.tex変えずにmain.texの記述のみ以下の様に変更します。

main2.tex
\documentclass{ujreport}
\includeonly{%
    contents/body1,
    %contents/body2
}
\begin{document}
    \include{contents/body1}
    \include{contents/body2}
\end{document}

main.png

すると、第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もありますが、正直とても大変なので基本的にはおすすめできません。bibtexbiblatexを使うと、一度ファイル名.bibファイルという参考文献リストを作っておくことで、文章中で引用した文献のみ参考文献リストとして表示しくくれたり、自動で並び変えたりしてくれるので、可搬性が高くなります。また、bibtexよりもbiblatexの方がカスタマイズ性が高いので、私はbiblatexを使用しました。

ファイル名.bibファイルの作り方

【ファイル名】はなんでも構いません。仮にreference.bibとします。
Google ScholarなどでBiBTeXの情報をコピーし、reference.bibに貼るだけです。(Google Scholarの情報は間違っていることが非常に多いので、使う場合は確認が必要です。学会の公式ページなどでcite->bibtexなどがあると思うので、可能ならばそこからコピーしましょう。)
Google Scholarの例

reference.bib
@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
  • giveninits=true
    • 名前がイニシャルだけになります。14
  • maxnames=8,minnames=3
    • maxnames以上の著者がいるときminnamesまで表示し、et al.とします。14

他にも様々なオプションがあります131415

おわりに

本記事では、主に日本語の文章を意識してuplatex+biblatex+dvipdfmxlatexmkを使ってコンパイルをする方法をまとめました。
また、筆者の知見として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

$HOME/.config/latexmk/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';
./.latexmkrc
#!/usr/bin/env perl
# shebang
#$pre_tex_code= '\AtBeginDocument{\thispagestyle{empty}付け加えだよ}';
$jobname = 'great_thesis';

main.tex

ルートファイル。

./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}

読み込んでいるファイル

./config/my-macros.tex
% いろはのカウンター
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\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}{付録}
./contents/body1.tex
\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
./contents/body2.tex
\chapter{2つ目の章だよ!}
\section{実験のための節だよ!}
実験のためのページ参照\label{test:1}
./contents/reference.bib
@book{高木貞治2010定本解析概論,
  title={定本解析概論},
  author={高木貞治},
  year={2010},
  publisher={岩波書店}
}

出力されるファイル

great_thesis_page-0001.jpg
great_thesis_page-0002.jpg
great_thesis_page-0003.jpg
great_thesis_page-0004.jpg
great_thesis_page-0005.jpg
great_thesis_page-0006.jpg
great_thesis_page-0007.jpg
great_thesis_page-0008.jpg

謝辞

本記事は著者が修士論文を書き終えて、テンションがあがったのでこれまでに知ったことをまとめておこうと書いたものです。
なぜか書くにあたって、英語の文章をたくさん読んだり、実験したりして二度と使わない予定のTeXに関してより詳しくなってしまいました。
しかし、疑問に思ったことは大抵文書にまとめられていたので、マニュアルやドキュメント、manコマンド、helpを作ってくれた偉大な先駆者たちに感謝します。
また、某リッチテキストエディタを使って修論を書いたら発狂していたと思うので、 TeX、LaTeX、pLaTeXを作って下さっている方々に心から御礼申し上げます。
あと、間違っていることもあるかと思うので、仮にこれから指摘してくださる方がいらっしゃったら深くお礼申し上げます。

参考文献

  1. TeX Live

  2. TeX と LaTeX の違い

  3. 新常識 (4) 日本語 LaTeX は (u)pLaTeX だけじゃない

  4. 新常識 (1) plautopatch は必ず読み込もう

  5. latexmk 2 3

  6. CONFIGURATION VARIABLES を構成変数としましたが、正しいのかいまいちわからないので、良い訳があったら教えてください。

  7. LaTeX2e unofficial reference manual (January 2022)

  8. SyncTeX

  9. pdfビュワーとエディタの関連が強いので、次書く予定の「neovimで修論を書く(仮題)」で詳細を書きます。

  10. dvipdfmx – An extended version of dvipdfm 2

  11. LaTeX の箇条書の番号を全角文字で

  12. 参考文献リストの作成 - thebibliography, bibitem

  13. BibLaTeX+Biberの始め方 2 3

  14. biblatex のオプションの解説 2 3

  15. BibLATEX 英独語のドキュメントしかないです。

9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11