https://blog.naskya.net/

[[ 🗃 ^wzWnj blog ]] :: [📥 Inbox] [📤 Outbox] [💥 Errbox] [🐤 Followers] [🤝 Collaborators] [🏗 Projects] [🛠 Commits]

Clone

HTTPS: git clone https://code.naskya.net/repos/wzWnj

SSH: git clone USERNAME@code.naskya.net:wzWnj

Branches

Tags

main :: content / post /

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) のように章ごとに分けたい場合は以下の一行をプリアンブルに書きます。

\numberwithin{equation}{section}

{{}}. hyperref パッケージを使う

取りあえずプリアンブルには以下の一行を入れておきましょう。これをすると、\ref\cite\url などで参照したところに勝手にハイパーリンクを張ってくれます。

pdfusetitle オプションをつけると pdf ファイルにタイトルを設定してくれます{{<note タイトルの位置を変更するためにタイトルを雑に「\vspace{-10ex}実験レポート」みたいにしているとそれがそのままタイトルになってしまうので気をつけましょう。>}}。

\usepackage{hyperref}
% or \usepackage[pdfusetitle]{hyperref}

{{}}. mathtools パッケージを使う

プリアンブルに以下のように書いておくと、数式のうち参照されているものだけに数式番号が付くようになります。

\usepackage{mathtools}
\mathtoolsset{showonlyrefs=true}

数式番号をつけたくないときに以下のようにわざわざ環境名に*をつけたり\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!}

$$\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} \abs{\frac{a_{n+1}}{a_n}}

$$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) = \mqty(\cos \theta & - \sin \theta \\ \sin \theta & \cos \theta)

$$\bm{R}(\theta) = \begin{pmatrix} \cos \theta & - \sin \theta \\\\ \sin \theta & \cos \theta \end{pmatrix}$$

対角行列は \dmat{} を使って書けます。

(\eta^{\mu\nu}) = \mqty(\dmat{-1, 1, 1, 1})

$$(\eta^{\mu\nu}) = \begin{pmatrix} -1 & & & \\\\ & 1 & & \\\\ & & 1 & \\\\ & & & 1 \end{pmatrix}$$

(\eta^{\mu\nu}) = \mqty(\dmat[0]{-1, 1, 1, 1})

$$(\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}) = \mqty(\xmat*{a}{3}{3})

$$(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[2]{x} y = \dv{x} \dv{y}{x} = \dv[2]{y}{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}$$

\int \dd{x} \sin x = - \cos x + c

∫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} などと書く苦しみから解放されます。

\qty(\pdv{p}{V})_T \qty(\pdv{V}{T})_p \qty(\pdv{T}{p})_V = -1

$$\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 \laplacian - \frac{1}{c^2} \pdv[2]{t}

$$\Box \coloneqq \nabla^2 - \frac{1}{c^2} \frac{\partial^2}{\partial t^2}$$

\pdv{f}{x}{y} = \pdv{f}{y}{x}

$$\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}

$$\hat{a}^\dagger \ket{n} = \sqrt{n+1} \ket{n+1}$$

\bra{\phi_j} \ket{\phi_k} = \delta_{jk}

$$\braket{\phi_j \vert \phi_k} = \delta_{jk}$$

\iiint \dd[3]{\bm{r}} \ket{\bm{r}} \bra{\bm{r}} = 1

$$\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) なども使えます。

\expval{\hat A}
\expval{\hat A}{\Psi}

$$\bra{\Psi} \hat{A} \ket{\Psi}$$

\matrixel{n}{\hat{A}}{m}

$$\bra{n} \hat{A} \ket{m}$$

このコマンドの実装を読んだことはありませんが、黒魔術で実装されている感がちょっとするので意図しない挙動を避けるために常に引数を {} で包むことをおすすめします。

% {} で引数を包まないと……?
\bra a \ket b
\ket \psi_1

a∣⟩b

$$\ket \psi_1$$

\bra{a} \ket{b}
\ket{\psi_1}

ab

$$\ket{\psi_1}$$

{{}}. texorpdfstring を適切に使う

節のタイトルに数式を使いたい場合などには(画像に alt text を設定するのと同じ感じで)\texorpdfstring{texstring}{pdfstring}でプレーンテキスト版も併記しておくとトラブルを防げます。

\section{\texorpdfstring{\int \dd{x} \abs{f(x)}}{∫ dx |f(x)|}の評価}

{{}}. siunitx パッケージを使う

物理量の記述には siunitx パッケージを使いましょう。

\usepackage{siunitx}

\SI{値}{単位} の形式で物理量を表します。単位は立体で書くとか数値と単位の間にはスペースを空けるとかをちゃんとやってくれます。単位を自然言語のように書けるのが気持ちいいです。

g = \SI{9.80665}{\metre\per\second\squared}

$$g = 9.806\~65 \~ \mathrm{m} \~ \mathrm{s}^{-2}$$

\SI{1000}{\centi\metre\cubed} = \SI{1}{\deci\metre\cubed}

$$1000 \~ \mathrm{cm}^3 = 1 \~ \mathrm{dm}^3$$

{{}}. tcolorbox で字下げしたい

tcolorbox パッケージを使うとお洒落なテキストボックスを描くことができます。このボックスはそのまま使うと段落の頭に字下げがありません。1 字分下げたいときは以下のように before upper オプションを使います。

\begin{tcolorbox}[before upper={\parindent 1em}]
  最初の段落。

  次の段落。
\end{tcolorbox}

{{}}. 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 ファイルを用意しています。

#!/usr/bin/env perl

@default_files = ("main");
$pdf_mode = 4;
$max_repeat = 5;

これを用意したら、あとは latexmk コマンドを叩くだけでコンパイルを行って main.pdf を作ってくれます。LaTeX 文書はコンパイルを複数回行わないと正しい結果が得られないことがよくありますが、$max_repeat で指定した回数以下の範囲で必要な回数だけコンパイルを叩いてくれます。あと BibTeX を使った参考文献リストを挿入したときに叩かなければいけないコマンドとかも自動で走らせてくれます{{< note いつも latexmk が勝手にやってくれるので、手動でやるときには具体的に何をしなければいけないのか私は知りません。 >}}。

$ latexmk -pvc && latexmk -c

のように -pvc オプションをつけて実行するとソースファイルを監視し続けて更新があったら自動でコンパイルをしてくれます。普段はレポートを書いている間これをずっと裏で走らせています。最後に -c オプションをつけて実行すると生成された中間ファイルやログファイルを消して綺麗にしてくれます。

{{}}. Git でバージョン管理をする

進捗管理やバックアップを兼ねて、レポートのワークスペースを Git リポジトリにしましょう!私はこれで Git に入門しました。

{{}}. 日付を 2022.08 みたいな形式にしたい

プリアンブルに以下のように書いて本文の一番最初のところで \maketitle します。コンパイル時の年月が勝手に入ります。

\title{タイトル}
\author{名前}
\makeatletter
\date{\the\year.\two@digits\month}
\makeatother

{{}}. 画像を入れたらコンパイルが遅すぎて辛い

画像はできるだけ pdf ファイルにしましょう。\includegraphics の引数に pdf ファイルも入れられます。pdf 画像の埋め込みは爆速です。

また、数式など別の箇所の出力結果を確認したいだけなので取りあえず画像は埋め込まないでいい(画像の部分は寸法だけ合っていれば真っ黒で出力してくれていい)場合には以下のように graphicx パッケージを demo オプション付きで読み込みましょう。これで画像は出力されませんがコンパイルは爆速になります。

これでエラーが出る場合にはここではなく最初の documentclass のほうのオプションに demo をつけるといいかもしれません。

\usepackage[demo]{graphicx}

真っ黒のプレビューではなくどうしても jpeg や png などの画像をちゃんと出力したい場合には、可能な限り画像のサイズ(データ量)を小さくしましょう。

{{}}. インラインの数式($$, \(\))を大きくしたい

\displaystyle をつけます。多用しないほうがいいでしょう。

$a$$b$の調和平均は$\displaystyle \frac{1}{\frac{1}{a} + \frac{1}{b}}$である。

ab の調和平均は $\displaystyle \frac{1}{\frac{1}{a} + \frac{1}{b}}$ である。

(cf. \displaystyle 無し{{<note このページは数式レンダリングに KaTeX を使っており、インライン数式がかなりマシ(十分大きい)に見えます。実際に LaTeX 文書でこのようなインライン数式を書くともっと小さく見えるはずです。>}}) ab の調和平均は $\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 になります。

\newcommand{\fn}[2]{#1\!\cleft[lightgray]{(}#2\cright[lightgray]{)}}

括弧の大きさは自動的に調整されます。

-\pdv{\fn{S}{x, t}}{t} = \fn{H}{\pdv{\fn{S}{x, t}}{x}, x}

$$ -\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() を用いれば、こちらは(普通の設定では)黒く出力されるため関数の引数の括弧と区別可能となります。

未解決の問題

[See repo JSON]