📗

レポート用LaTeX周りメモ

2021/04/30に公開

私が普段大学のレポートを書くために使っているあれこれをメモしておく。

レポートを書く手段について

理系学生なら、レポートはLaTeX一強なので、嫌でも使わざるをえない。
一応LaTeXを使う理由を述べておく。
LaTeXはスクリプト的なものを書いて、コンパイルしてPDFに変換する。

そのため

  • キーボードで完結するので楽。
  • 文を書くフェーズと、見た目を整えるフェーズを分離できる。
  • 図表の番号を振るのが楽。
  • 数式を書くといえばLaTeXみたいなとこある。
  • Gitで管理できる。

また、LaTeX形式でスライドを作成できるBeamerなるものがある。

他のレポートを書く方法も紹介しておく

  • MicrosoftWord, Googleドキュメント
    • みなさんご存知のやつ。Wordはまじで操作性悪かった記憶ある
    • 一応これでもLaTeXみたいに数式が書けるらしい。
    • あと、wordファイル上でコメントのやりとりができるのも便利。
    • 編集履歴の保存も全部入ってる。
  • マークダウン
    • VSCodeを使うなら、Markdown Preview Enhancedを使えば数式が使えるようになる。
  • SATySFi
    • LaTeXの可読性の低さやエラーの不親切さを改善するべく開発されているやつ。
    • まだ、ユーザーが多くなくて敷居が高い。
    • SATySFi Wiki 学習用資料
  • Typst
    • SATySFi よりさらに新しいやつ
    • コンパイルが爆速らしい

LaTeX周りの入門サイト・LaTeX全般について

Texに入門したい人は以下のサイトで始めるのがオススメ。

VSCodeでLaTeXが書きたい(環境周り)

  • ここの手順をする
    • ここの手順ではpLaTeXとかいうのが使えるようになる。
    • 他にもLuaLaTeXとか色々あるらしい。

ざっくりいうと

  • VSCodeとTeX Liveを入れる
  • .latexmkrcを書く
  • VSCodeにLaTeX Workshop入れる
  • VSCodeのsettings.jsonにもろもろ書く

環境構築したくない人向け

ブラウザ上でログインすればすぐにLaTeXが使えるようになるやつ。

Overleaf環境をローカルで

Docker DesktopでローカルにOverleaf環境を構築した時のメモ

Dockerが使えるなら、割と楽にOverleafがローカルで使えるらしい。

LaTeXのソースを分割する

レポートがでかくなってくると, ファイルの行数すごいしやってられなくなる.
意外と簡単にファイル分割できる.
ヘッダとか書かずに, ただ\inputで分割したソースを読み込むだけ.
章別に分けたり, 表を別のファイルにしたり.

\input hoge.tex
\input fuga.tex

数学記号・数式

amsmathの数式環境をよく使う。場合分けのある数式とかを書く場合に、便利。

数学記法全般について

論理式の否定: notは斜線

$\not{x}$だと, 斜線が入るだけ, $\bar{x}$と書く.

ソースコードを入れる

listingsを使う。

% \usepackage{listings, jlisting, color}
\lstinputlisting[caption=hogehoge, label=code:hoge, language=C]{./hoge.c}
% 直接書くなら
\begin{lstlisting}[caption=fugafuga, label=code:fuga, language=C]
main() {
  return 0;
}
\end{lstlisting}

listingsだけだと、日本語コメントに対応していない。TeXLiveだと標準で、\usepackage{listings, jvlisting}するだけで対応できる。
なんか、私の環境だとjvlistingが効かないので、jlistingを下記のリンクからダウンロードする。
本当はちゃんとした場所に配置すべきなんだけど、report.texと同じ場所にぶちこんでおけば読み込んでくれる。
https://osdn.net/projects/mytexpert/downloads/26068/jlisting.sty.bz2/

また、複数の言語のソースコードを載せる際に、言語に応じてスタイルを変更したいときは\lstdefinestyle{hogehoge}{}で個別にスタイルを定義できる。

クラス図を書く

また、クラス図に出てくるAggregationとかCompositionとかは下の記事が参考になる。

表を入れる

\begin{table}[htbp]
  \centering
  \caption{hoge}
  \label{tab:hoge}
  \begin{tabular}{|llll|l|}
    \hline
    hoge & fuga & piyo & foo & bar \\
    \hline
    0 & 0 & 0 & 0 & 0 \\
    \hline
  \end{tabular}
\end{table}

表で斜め線を入れる

diagboxを使う
% \usepackage{diagbox}
\begin{table}[htbp]
  \centering
  \caption{hoge}
  \label{tab:hoge}
  \begin{tabular}{|llll|l|}
    \hline
    \diagbox{ho}{ge} & fuga & piyo & foo & bar \\
    \hline
    0 & 0 & 0 & 0 & 0 \\
    \hline
  \end{tabular}
\end{table}

カルノー図を入れる

図を入れる

%\usepackage[dvipdfmx]{graphicx}
\begin{figure}[htbp]
  \centering
  \includegraphics[width=12cm]{hoge.png}
  \caption{hoge}
  \label{fig:hoge}
\end{figure}

画像は、png形式かpdfで入れるのが無難。
また、tikzを使うことで、関数のグラフや状態遷移図を描くこともできる。
SVG画像も入れれるけどクソめんどくさい。

図を複数入れる

minipageを使う.
% \usepackage[subrefformat=parens]{subcaption}
\begin{figure}[htbp]
  \begin{minipage}[t]{0.45\hsize}
    \centering
    \includegraphics[width=6cm]{hoge.png}
    \subcaption{hoge}
  \end{minipage}
  \begin{minipage}[t]{0.45\hsize}
    \centering
    \includegraphics[width=6cm]{fuga.png}
    \subcaption{fuga}
  \end{minipage}
  \begin{minipage}[t]{0.45\hsize}
    \centering
    \includegraphics[width=6cm]{pien}
    \subcaption{pien}
  \end{minipage}
  \caption{hoge, fuga, pien}
  \label{fig:hoge}
\end{figure}

データをグラフ化する

gnuplotを使う。CUIで操作するグラフ描画ソフト。データからグラフを出力するスクリプトを書いたり、グラフの曲線を多項式で近似したりできる。

gnuplotのスクリプトの例

set term pdfcairo enhanced size 4in, 3in
set output 'hoge-graph.pdf'
set xlabel '横軸 title'
set ylabel '縦軸 title'
set key left top box
plot [0:1] '1.data' using 1:2 title "hoge",\
    '2.data' using 1:2 title "fuga",\
    '3.data' using 1:2 title "piyo"

gnuplotが読み込むデータの例#が行頭にある行はコメントで, 数値はスペース区切りで配置する

# コメント
0 1.0
1 2.1
2 3.5
3 5.5

latex内で図を描く

TikZを使えば、LaTeX内で直接図をスクリプトで描ける。
各種関数のグラフ、図形、状態遷移図とかのグラフが描ける。
3次元グラフも描ける。
ノードの数が増えてくると、位置の指定がだるくなる。

Graphvizでデータ構造のグラフや状態遷移図を描く

二部グラフとか、プログラムで使ってるやつを出力して、それを出来るだけかんたんに図に変えたい。

GUIで簡単な状態遷移図が描きたい

回路図が描きたい

draw.io使うといいよ

リンクを貼る方法

hyperrefとpxjahyperを使えば、自動で\ref{}\cite{}にリンクが付く。
URLが貼りたいときは\url{http://hogehoge.com}とか書く。

\usepackage[dvipdfmx]{hyperref}
\usepackage{pxjahyper}

セクションにリンクを貼る

\hyperref[sec:hoge]{ほげほげ}

\section{ほげほげ}
\label{sec:hoge}

参考文献の書き方

参考文献リストは複数ファイルから読み込める
(以下はbackground.bibとmethod.bibを読み込み)

\bibliography{references/background,references/method}

なんか bib ファイルが読み込めないとき(outdir 指定時)

latexmk のオプションとして -bibtexfudge- を付ける
or latexmkrc に $bibtex_fudge=0; を記載する

参考: https://tex.stackexchange.com/questions/710095/bibtex-cannot-find-bibliography-file-when-it-is-not-in-the-main-files-directory

参考文献管理ソフト

参考文献を管理する用の便利なソフトがある

  • Zotero
    • 完全フリー
    • 導入方法
    • Chrome 拡張で web 上の論文を簡単に保存できたり便利
    • Google Drive をローカルにマウントすることで, 文献の保存先を Google Drive にもできる.

付録のつけかた

\appendixを挿入した後のsectionが全部付録A.みたいな表記に変わる.
付録っていうのが気に入らなければ, \appendixの後で定義し直せばいい.

\appendix
% \def\thesection{Appendix\Alph. {section}}
\section{ほげほげ}

その他

section・タイトル周りいじりたい

目次を入れる

\tableofcontents

箇条書き

\begin{itemize}
  \item hoge
  \item fuga
\end{itemize}

頭に①とかつける箇条書き

\begin{enumerate}
  \renewcommand{\labelenumi}{\textcircled{\scriptsize \theenumi}}
  \item hoge
  \item fuga
\end{enumerate}

文章の途中で箇条書きを使う場合インデントするとよい

ほげほげの利点は
\begin{quote}
  \begin{itemize}
    \item fugafuga
    \item piyopiyo
  \end{itemize}
\end{quote}
である.

空白を入れたい時

\quad 一文字分のスペース
\qquad 二文字分のスペース

インライン数式で記号を書くの便利

箇条書き等の途中の行を三点リーダーで省略したいとき

\begin{itemize}
  \item hoge
  \begin{quote}
    $\vdots$
  \end{quote}
  \item fuga
\end{itemize}

A~B とか書きたい時

波ダッシュは普通に置いてもだめ, どうしても使いたいときは, インライン数式で, 近似のやつを使う.

A$\sim$B

部分的に文字の大きさを変えたい時

\tiny < \scriptsize < \footnotesize < \small < \normalsize < \large < \LARGE < \huge < \Huge
【LaTeX】文字サイズの変更方法まとめ

レポートの書き方周り

Writing 全般

Discussion