https://blog.naskya.net/
Clone
HTTPS:
git clone https://code.naskya.net/repos/wzWnj
SSH:
git clone USERNAME@code.naskya.net:wzWnj
Branches
Tags
8mnfg7373nnw.md
これはなに
今まで LaTeX でレポートを書いてきて溜まってきた知見を書いています。何か思いついたりさらに知見を得たりしたら追記します。
知見
{{}}. 数式番号・図番号・章番号などは直書きしない
番号がずれたときにいちいち書き換えるのは大変なので、ラベルをつけて参照しましょう。
\section{hoge}
\label{sec:hoge} % ラベルをつける!
あいうえお
\section{fuga}
第\ref{sec:hoge}章で述べたように……
結果は図\ref{fig:result}に示す通りである。
\begin{figure}
\centering
\includegraphics{foo.pdf}
\caption{結果}
\label{fig:result} % ラベルをつける!
\end{figure}
ラベルは一意であれば何でもいいですが、以下のように付けるのがよいと思います。
対象 | ラベルの例 |
---|---|
section | sec:foobar |
equation | eq:foobar |
figure | fig:foobar |
table | tab:foobar |
数式を参照するときには \eqref{eq:foo}
のように \eqref
を使うと (10)
のように数式番号を丸括弧で囲ってくれます。
数式番号を (2.10)
のように章ごとに分けたい場合は以下の一行をプリアンブルに書きます。
{{}}. hyperref パッケージを使う
取りあえずプリアンブルには以下の一行を入れておきましょう。これをすると、\ref
や \cite
や \url
などで参照したところに勝手にハイパーリンクを張ってくれます。
pdfusetitle
オプションをつけると pdf ファイルにタイトルを設定してくれます{{<note タイトルの位置を変更するためにタイトルを雑に「\vspace{-10ex}実験レポート」みたいにしているとそれがそのままタイトルになってしまうので気をつけましょう。
>}}。
{{}}. mathtools パッケージを使う
プリアンブルに以下のように書いておくと、数式のうち参照されているものだけに数式番号が付くようになります。
数式番号をつけたくないときに以下のようにわざわざ環境名に*
をつけたり\nonumber
を使ったりしているかもしれませんが、そんなことをしなくても参照されている数式だけに数式番号をつけるようにしてくれます。
\begin{equation*}
% your equation goes here
\end{equation*}
\begin{equation}
\nonumber % your equation goes here
\end{equation}
また、mathtools パッケージを読み込むと \coloneqq
や \eqqcolon
などの記号が使えるようになります。
$$\mathrm{e}^x \coloneqq \sum_{n=0}^\infty \frac{x^n}{n!}$$
{{}}. physics パッケージを使う
追記: physics パッケージの使用は非推奨となりました。physics2 パッケージなどを代わりに使いましょう{{< link https://qiita.com/Yarakashi_Kikohshi/items/131e2324f401c3effb84
>}}。
数式を書くときに使えるいろいろな便利コマンドが入っています。使用頻度の高そうなものをいくつか紹介します。
大きさが自動で調整される括弧など
大きさが自動で調節される \qty()
, \qty[]
, \qty{}
, \abs{}
, \norm{}
などが使えます。\left
とか \right
とかを書く苦しみから解放されます。
p_\beta(\sigma) = \frac{1}{Z(\beta)} \exp \qty{-\beta \qty[
\sum_i \frac{\bm{p}_i^2}{2m} + U \qty(\bm{r}_1, \dots, \bm{r}_N)
]}
$$p_\beta(\sigma) = \frac{1}{Z(\beta)} \exp \left\lbrace -\beta \left\lbrack \sum_i \frac{\bm{p}_i^2}{2m} + U\left\lparen \bm{r}_1, \dots, \bm{r}_N \right\rparen \right\rbrack \right\rbrace$$
$$r = \lim_{n \to \infty} \left\lvert\frac{a_{n+1}}{a_n}\right\rvert$$
余談
日本の小学校では括弧は内側から順に ()
, {}
, []
の順で使うように習った人もいるかもしれませんが、世界的には(クソデカ主語) ()
, []
, {}
の順で使うことが普通なので長いものには巻かれておきましょう。
また、それぞれの括弧は「小括弧」「大括弧」「中括弧」ではなく「丸括弧 (parenthesis/round bracket)」「角括弧 (square bracket)」「波括弧 (curly bracket)」というふうに形を表す名前で呼ぶとよいでしょう。
行列
\mqty()
, \mqty{}
, \mqty[]
, \mdet{}
などが使えます。\begin{pmatrix}
~\end{pmatrix}
とかを書く苦しみから解放されます。
$$\bm{R}(\theta) = \begin{pmatrix} \cos \theta & - \sin \theta \\\\ \sin \theta & \cos \theta \end{pmatrix}$$
対角行列は \dmat{}
を使って書けます。
$$(\eta^{\mu\nu}) = \begin{pmatrix} -1 & & & \\\\ & 1 & & \\\\ & & 1 & \\\\ & & & 1 \end{pmatrix}$$
$$(\eta^{\mu\nu}) = \begin{pmatrix} -1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0 \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \end{pmatrix}$$
\xmat*
は下付き添字を書いてくれます。ありがとう。
$$(a_{ij}) = \begin{pmatrix} a_{11} & a_{12} & a_{13} \\\\ a_{21} & a_{22} & a_{23} \\\\ a_{31} & a_{32} & a_{33}\end{pmatrix}$$
常微分
- 微分演算子
\dv{x}
\dv[n]{x}
- 導関数
\dv{y}{x}
\dv[n]{y}{x}
- 微分小
\dd{x}
\dd[n]{x}
などが使えます。いちいち分数を書いたりする苦しみから解放されます。
$$\frac{\mathrm{d}^2}{\mathrm{d}x^2} y = \frac{\mathrm{d}}{\mathrm{d}x} \frac{\mathrm{d}y}{\mathrm{d}x} = \frac{\mathrm{d}^2y}{\mathrm{d}x^2}$$
∫dxsin x = − cos x + c
\bm{E}(\bm{r}, t) = \iiint \dd[3]{\bm{k}} \int \dd{\omega} \, \tilde{\bm{E}}(\bm{k}, \omega) \, \mathrm{e}^{\mathrm{i}(\bm{k} \cdot \bm{r} - \omega t)}
$$\bm{E}(\bm{r}, t) = \iiint \mathrm{d}^3\bm{k} \int \mathrm{d}\omega \~ \tilde{\bm{E}}(\bm{k}, \omega) \~ \mathrm{e}^{\mathrm{i}(\bm{k} \cdot \bm{r} - \omega t)}$$
微分の d は立体のほうが気持ちいいですよね(異論は認める)。
偏微分
\pdv{x}
, \pdv{f}{x}
などが使えます。\frac{\partial f}{\partial x}
などと書く苦しみから解放されます。
$$\left\lparen \frac{\partial p}{\partial V} \right\rparen_T \left\lparen \frac{\partial V}{\partial T} \right\rparen_p \left\lparen \frac{\partial T}{\partial p} \right\rparen_V = -1$$
$$\Box \coloneqq \nabla^2 - \frac{1}{c^2} \frac{\partial^2}{\partial t^2}$$
$$\frac{\partial^2 f}{\partial x \partial y} = \frac{\partial^2 f}{\partial y \partial x}$$
ブラ・ケット記法
physics パッケージなので物理屋さんが大好きなこれも使えます。\bra{}
と \ket{}
を続けて書くと真ん中の棒を 1 本にしてくれます。
$$\hat{a}^\dagger \ket{n} = \sqrt{n+1} \ket{n+1}$$
$$\braket{\phi_j \vert \phi_k} = \delta_{jk}$$
$$\iiint \mathrm{d}^3\bm{r} \ket{\bm{r}} \bra{\bm{r}} = 1$$
\bra{a} \ket{b}
, \ket{a} \bra{b}
は以下のようにも書けます。
% これらは全部同じ
\bra{a} \ket{b}
\braket{a}{b}
\ip{a}{b} % inner product -> ip
% これらも全部同じ
\ket{a} \bra{b}
\ketbra{a}{b}
\dyad{a}{b}
\op{a}{b} % outer product -> op
他にも期待値を表す \expval
(\ev
) や行列要素を表す \matrixel
(\mel
) なども使えます。
⟨Â⟩
$$\bra{\Psi} \hat{A} \ket{\Psi}$$
$$\bra{n} \hat{A} \ket{m}$$
このコマンドの実装を読んだことはありませんが、黒魔術で実装されている感がちょっとするので意図しない挙動を避けるために常に引数を {}
で包むことをおすすめします。
⟨a∣⟩b
$$\ket \psi_1$$
⟨a∣b⟩
$$\ket{\psi_1}$$
{{}}. texorpdfstring
を適切に使う
節のタイトルに数式を使いたい場合などには(画像に alt text を設定するのと同じ感じで)\texorpdfstring{texstring}{pdfstring}
でプレーンテキスト版も併記しておくとトラブルを防げます。
{{}}. siunitx パッケージを使う
物理量の記述には siunitx パッケージを使いましょう。
\SI{値}{単位}
の形式で物理量を表します。単位は立体で書くとか数値と単位の間にはスペースを空けるとかをちゃんとやってくれます。単位を自然言語のように書けるのが気持ちいいです。
$$g = 9.806\~65 \~ \mathrm{m} \~ \mathrm{s}^{-2}$$
$$1000 \~ \mathrm{cm}^3 = 1 \~ \mathrm{dm}^3$$
{{}}. tcolorbox で字下げしたい
tcolorbox パッケージを使うとお洒落なテキストボックスを描くことができます。このボックスはそのまま使うと段落の頭に字下げがありません。1 字分下げたいときは以下のように before upper
オプションを使います。
{{}}. tcolorbox で listing を囲みたい
listing はソースコードを表示するための環境です。これを tcolorbox で囲むためには
% プリアンブル
\usepackage{tcolorbox}
\usepackage{listings}
% 本文
\begin{tcolorbox}
\begin{listing}
print("Hello, world!")
\end{listing}
\end{tcolorbox}
などとしなくても{{< note コードブロックは書いた内容がそのまま出力されるので(LaTeX 文書としての)インデントは入れないようにしましょう。
>}}、tcblisting 環境を使えばよいです。
% プリアンブル
\usepackage[listings]{tcolorbox}
% 本文
\begin{tcblisting}
print("Hello, world!")
\end{tcblisting}
{{}}. tcolorbox を並べたい
tcolorbox (tcblisting も可)を複数並べたい場合、tabular などの各セルに tcolorbox を配置したりせずとも
% プリアンブル
\usepackage[most]{tcolorbox}
% 本文
\begin{tcbraster}[raster columns=2, raster valign=top]
\begin{tcolorbox}
box 1
\end{tcolorbox}
\begin{tcblisting}
box 2
\end{tcblisting}
\end{tcbraster}
のように tcbraster 環境を使えばよいです。raster columns
で列数を指定します。
{{}}. コンパイルは latexmk
に任せる
既に「これだ!」という pdf ファイルの生成方法を見つけている人はそれを使ってもらえばいいですが、そうでなければ全てを latexmk
に任せるのが無難な気がしています。
私は LuaLaTeX を使用していてレポートのファイル名は基本的に main.tex
としているので、以下のような .latexmkrc
ファイルを用意しています。
これを用意したら、あとは latexmk
コマンドを叩くだけでコンパイルを行って main.pdf
を作ってくれます。LaTeX 文書はコンパイルを複数回行わないと正しい結果が得られないことがよくありますが、$max_repeat
で指定した回数以下の範囲で必要な回数だけコンパイルを叩いてくれます。あと BibTeX を使った参考文献リストを挿入したときに叩かなければいけないコマンドとかも自動で走らせてくれます{{< note いつも latexmk が勝手にやってくれるので、手動でやるときには具体的に何をしなければいけないのか私は知りません。
>}}。
のように -pvc
オプションをつけて実行するとソースファイルを監視し続けて更新があったら自動でコンパイルをしてくれます。普段はレポートを書いている間これをずっと裏で走らせています。最後に -c
オプションをつけて実行すると生成された中間ファイルやログファイルを消して綺麗にしてくれます。
{{}}. Git でバージョン管理をする
進捗管理やバックアップを兼ねて、レポートのワークスペースを Git リポジトリにしましょう!私はこれで Git に入門しました。
{{}}. 日付を 2022.08
みたいな形式にしたい
プリアンブルに以下のように書いて本文の一番最初のところで \maketitle
します。コンパイル時の年月が勝手に入ります。
{{}}. 画像を入れたらコンパイルが遅すぎて辛い
画像はできるだけ pdf ファイルにしましょう。\includegraphics
の引数に pdf ファイルも入れられます。pdf 画像の埋め込みは爆速です。
また、数式など別の箇所の出力結果を確認したいだけなので取りあえず画像は埋め込まないでいい(画像の部分は寸法だけ合っていれば真っ黒で出力してくれていい)場合には以下のように graphicx
パッケージを demo
オプション付きで読み込みましょう。これで画像は出力されませんがコンパイルは爆速になります。
これでエラーが出る場合にはここではなく最初の documentclass
のほうのオプションに demo
をつけるといいかもしれません。
真っ黒のプレビューではなくどうしても jpeg や png などの画像をちゃんと出力したい場合には、可能な限り画像のサイズ(データ量)を小さくしましょう。
{{}}. インラインの数式($$
, \(\)
)を大きくしたい
\displaystyle
をつけます。多用しないほうがいいでしょう。
a と b の調和平均は $\displaystyle \frac{1}{\frac{1}{a} + \frac{1}{b}}$ である。
(cf. \displaystyle
無し{{<note このページは数式レンダリングに KaTeX を使っており、インライン数式がかなりマシ(十分大きい)に見えます。実際に LaTeX 文書でこのようなインライン数式を書くともっと小さく見えるはずです。
>}}) a と b の調和平均は $\frac{1}{\frac{1}{a} + \frac{1}{b}}$ である。
{{}}. underbrace
の高さを揃えたい
underbrace
を複数回使うと高さが揃わないことがよくあります。
L = \underbrace{\frac{1}{2} m \bm{v}^2}_{\mbox{\tiny 運動エネルギー}} - \underbrace{U(\bm{r}, t)}_{\mbox{\tiny 位置エネルギー}}
$$ L = \underbrace{\frac{1}{2} m \bm{v}^2}_{\text{\tiny 運動エネルギー}} - \underbrace{U(\bm{r}, t)}\_{\text{\tiny 位置エネルギー}} $$
そのような場合、vphantom
を使用します。
L = \underbrace{\frac{1}{2} m \bm{v}^2}_{\mbox{\tiny 運動エネルギー}} - \underbrace{U(\bm{r}, t) \vphantom{\frac{1}{2} m \bm{v}^2}}_{\mbox{\tiny 位置エネルギー}}
$$ L = \underbrace{\frac{1}{2} m \bm{v}^2}_{\text{\tiny 運動エネルギー}} - \underbrace{U(\bm{r}, t) \vphantom{\frac{1}{2} m \bm{v}^2}}\_{\text{\tiny 位置エネルギー}} $$
{{}}. 取りあえず詰めてページ数を減らしたい
たまにそういうことがしたくなります。以下のようにします。
% 余白を変更
\usepackage[left=2cm,right=2cm,top=2cm,bottom=3cm]{geometry}
% やや強引な方法
% \def\baselinestretch{0.9}
図表や式の前後などの余白が多いところにちまちま \vspace{-2ex}
とかを入れていくのもアリ。
{{}}. 数式の多いスライドを作りたい
PowerPoint の数式エディタでちまちまやるのはつらいので、Beamer を使いましょう。
\documentclass[unicode,12pt,mathserif]{beamer}
% LuaLaTeX & 日本語を使う人なら
\usepackage{luatexja}
\usepackage[ipaex]{luatexja-preset}
\usepackage{beamer}
{{}}. 関数の引数の括弧を薄い色にしたい
f(a+b) というのが (a+b) を関数 f で写した値なのか f ⋅ (a+b) のことなのか、構文の上で区別できないのが嫌だと思うことがよくあります[要出典]。
プリアンブルに以下のように書いて \fn
を定義すると、\fn{f}{x}
で f(x) を表現でき、引数を表す括弧が lightgray
になります。
括弧の大きさは自動的に調整されます。
$$ -\frac{\partial S \textcolor{#909090}{(} x, t \textcolor{#909090}{)}}{\partial t} = H \huge{\textcolor{#909090}{(}} \normalsize \frac{\partial S \textcolor{#909090}{(} x,t \textcolor{#909090}{)}}{\partial x}, x \huge{\textcolor{#909090}{)}} $$
普通の丸括弧には physics
パッケージの \qty()
を用いれば、こちらは(普通の設定では)黒く出力されるため関数の引数の括弧と区別可能となります。
未解決の問題
- ネイピア数 e や虚数単位 i などは立体で書きたいけど、それを短く書くためのいい感じのパッケージが見つかりません。自分で
\newcommand{\e}{\ensuremath{\mathrm{e}}}
などと定義してもいいけど、できればオレオレコマンドを作るのではなく(存在するなら)広く使われているパッケージに頼りたいです。