Nagoya University of Arts and Sciences 名古屋学芸 …看護学部 看護学科 管理栄養学部 管理栄養学科 ヒューマンケア学部 子どもケア学科 ・子どもケア専攻
ソースも出力も美しく - prml.main.ist.hokudai.ac.jpryo/contents/textech2016/... ·...
Transcript of ソースも出力も美しく - prml.main.ist.hokudai.ac.jpryo/contents/textech2016/... ·...
現代的 LATEXコードのすすめソースも出力も美しく
渡辺 僚
北海道大学 大学院情報科学研究科 情報理工学専攻 数理科学講座 情報認識学研究室
基盤 (S) RAセミナー
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 1 / 33
話すひと
名前 渡辺 僚 (わたなべ りょう)
所属 情報認識学研究室
出身 北海道釧路市略歴 釧路高専
▶ 情報工学科 (2005-10)
北大▶ 3年次編入 (2010-12)▶ 修士課程 (2012-14)▶ 博士課程 (2014-)
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 2 / 33
話すこと
LATEXは科学者必須のツール.困ったとき,ちょっとネットで検索するとよく粗悪なサンプルコードをつかまされる.
▶ 粗悪: レガシー・泥臭い・場当たり的 etc.▶ プログラミング等でも同じといえば同じ.▶ 経験則的に LATEXはその比率が高い.
話すことLATEXで文書を書くにあたって,簡単かつきれいに出力されるような書き方を,よくある悪い例と合わせてひたすら紹介.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 3 / 33
基本理念
目次
1 基本理念
2 数式書き方並べ方
3 図表の配置
4 擬似コード
5 文章中のあれこれ
6 おわりに
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 4 / 33
基本理念
基本理念
楽する努力をする.▶ 手作業で何個もスペースを入れて位置を揃えたり見た目を整える努力は無駄.▶ それよりは,自動的にに位置が揃う書き方それを提供するパッケージをを探す努力をしよう.
意味とデザインの分離を意識.▶ 例えば,「フレーズをイタリックで書きたい」と思うときは,そのフレーズを強調したいから.であるなら,コード側には「イタリック体で出力せよ」というより「強調せよ」と書くべき.
▶ 励行できていれば,例えばスタイルを差し替えて別の会議への再投稿が円滑になる(はず.)
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 5 / 33
数式
目次
1 基本理念
2 数式書き方並べ方
3 図表の配置
4 擬似コード
5 文章中のあれこれ
6 おわりに
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 6 / 33
数式 書き方
縦棒 絶対値
縦棒 | は曖昧.意味に合わせたコマンドが別途ある.1 絶対値記号 |x|.括弧と同類.2 内包表記 {x ∈ R | f(x) ≤ 0}.どちらかというと中置演算子.
3df
dx
∣∣∣∣x=1
括弧のようにふるまう縦棒は\lvert,\rvertで出力.とくに|と比べて見た目は変わらない.二重縦棒は\lVert,\rVert.
|x|, |x|
| \bm{x} |, \lvert \bm{x} \rvert∥∥X − Ya
∥∥\left\lVert X - \frac{Y}{a} \right\rVert
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 7 / 33
数式 書き方
縦棒 条件付け
条件付けのときは\mid
ほどよい隙間が空いてくれる.
ただしカッコに合わせて伸びない.
P = {x ∈ R|f(x) = 0}
\[ P = \{ x \in \mathbb{R} | f(x)=0 \} \]
P = {x ∈ R | f(x) = 0}
\[ P = \{ x \in \mathbb{R} \mid f(x)=0 \} \]
P =
{x ∈ R | f(x)
x= 0
}\[ P = \left\{ x \in \mathbb{R} \mid \frac{f(x)}{x}=0 \right\} \]
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 8 / 33
数式 書き方
縦棒 そのほか
関数 f(x)の x = 1における微係数df
dx
∣∣∣∣x=1
みたいなのは泥臭く書くしかない(と思う.)
\newcommand{\dee}{\mathrm{d}}
\left. \frac{\dee f}{\dee x} \right|_{x=1}
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 9 / 33
数式 書き方
argmax,argmin
\arg \max はコンパイルできてしまうが間違い.\DeclareMathOperator*を用いて新たな演算子を定義する.
インライン数式とディスプレイ数式で添字部分の扱いが切り替わる.
演算子定義なので勝手にローマン体になる.
At round t, she chooses I(t) = argmaxi∈AB(i, t), that is
I(t) = argmaxi∈A
B(i, t).
\DeclareMathOperator*{argmax}{arg\,max}}
At round $t$, she chooses $\argmax_{ i \in A } B(i,t)$, that is
\[ \argmax_{ i \in A } B(i,t). \]
\,はちょっとだけスペースを入れるコマンド(好みに応じて).
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 10 / 33
数式 書き方
二項係数
(n
k
)\binomコマンドで書く.
\[ \binom{n}{k} \]
行列で書くのは論外.\[ \begin{pmatrix} n \\ k \end{pmatrix} \]
一部 n \choose kという書き方をする人もいるが,これは古い.\[ n \choose k \]
nCk という記法は国際標準ではない模様.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 11 / 33
数式 書き方
3個の点
何を省略しているかに応じて多種多様な(高さの)点打ちコマンドがある.
\dotsc コンマ a1, a2, . . . , an.
\dotsb 二項演算 a1 + a2 + · · ·+ an.
\dotsm 乗算 a1a2 · · · an.
\dotsi 積分∫· · ·
∫f(x1, . . . , xn)dx1 . . . dxn.
しかし,前後の流れから適切なものになる \dotsコマンドがあるので,大概それでよい.
コンマの省略でピリオドを 3個打つのは NG.
a1, ..., an. b1, . . . , bn. c1 + · · ·+ cn.
a_1, ..., a_n. \quad b_1, \dots, b_n. \quad c_1 + \dots + c_n.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 12 / 33
数式 書き方
ちょっと便利な別名
擬似コード・論理式や写像で数式中に矢印を引くときに,その矢印の意味に即した短い別名を用いることができる.
Table: 矢印の別名表
通常 省略形 利用例 出力例\leftarrow \gets $n \gets n+1$ n← n+ 1\rightarrow \to $E \to [0,1]$ E → [0, 1]
\Longleftrightarrow \iff $A \iff B$ A ⇐⇒ B
ベクトル等で数式中に太字を出力したいときも\mathbfより短い\bmがある(要 bmパッケージ).
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 13 / 33
数式 並べ方
一行だけど長い数式
\multline環境を使う.
それ自身が環境なので\equationの代わりに使う.
もちろんアスタリスクをつければ(\multline*)式番号がつかなくなる.
mult i lineではない.
α = A+B + C +D + E + F +G+H + I + J +K + L+M
+N +O + P +Q+R+ S + T + U + V +W +X + Y + Z.
\begin{multline*}
\alpha = A+B+C+D+E+F+G+H+I+J+K+L+M \\
+O+P+Q+R+S+T+U+V+W+X+Y+Z.
\end{multline}
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 14 / 33
数式 並べ方
場合分け
\casesを使うのはもちろん,数式と文章が混在した条件を書くときは\textコマンドの中に$-$を使う・
器用に\left\{ \begin{array} - \end{array} \right.なんて書くのは無駄.
条件中の数式を書くのに\textコマンドを脱するのも無駄(\mboxは時代遅れ.)
f(x) = \begin{cases}
-x & \text{(if } x < 0 \text{, bad example)} \\
x & \text{(if $x \geq 0$, better example)}
\end{cases}
f(x) =
{−x (if x < 0, bad example)
x (if x ≥ 0, better example)
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 15 / 33
数式 並べ方
数式を揃えて並べる
\eqnarrayは旧式.\alignを使う.区切り文字&は関係演算子の前だけに入れる.
▶ \eqnarrayのときは関係演算子を挟んでいた.▶ 演算子がないときは\quadを入れておく(マニュアル推奨の手法.)
複数ヶ所区切れる(\equnarrayはできない?)
A = B + C +D
= B + C
+ E + F (D = E + F )
\begin{align*}
A &= B + C + D & & \\
&= B + C & & \\
&\quad + E + F & & (D=E+F)
\end{align*}
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 16 / 33
図表の配置
目次
1 基本理念
2 数式書き方並べ方
3 図表の配置
4 擬似コード
5 文章中のあれこれ
6 おわりに
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 17 / 33
図表の配置
図表のセンタリング
\begin{center} ... \end{center} で囲まずに \centering と書く.
下端のスペース幅が狭くなる.
コードの行数も減る.
Text.
The figure.
Figure 1: The title.
Text.
\begin{figure}
\begin{center}
\includegraphics{figure.eps}
\end{center}
\end{figure}
Text.
The Figure.
Figure 1: The title.
Text.
\begin{figure}
\centering
\includegraphics{figure.eps}
\end{figure}
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 18 / 33
図表の配置
図表を並べる
subfigureは古いパッケージ.現在は subcaptionが主流.
Figure.
(a) A
Figure.
(b) B
Figure.
(c) C
Figure.
(d) D
Figure 1: Figures
\usepackage{subcaption}
\usepackage{graphicx}
\begin{figure} \centering
\subcaptionbox{A}{\includegraphics{...}}
\subcaptionbox{B}{\includegraphics{...}}
\subcaptionbox{C}{\includegraphics{...}}
\subcaptionbox{D}{\includegraphics{...}}
\caption{Figures}
\end{figure}
段を変えるときは二行改行する(段落を改める要領で).
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 19 / 33
図表の配置
subcaptionが使えないときは
一部雑誌等で指定のクラスファイル(svjour3,ieicejとか)では subcaptionパッケージが使えないかわりに,ちょっと古いけど subfigureよりは新しい subfigを使う.
Figure.
(a) A
Figure.
(b) B
Figure.
(c) C
Figure.
(d) D
Figure 1: Figures
\usepackage{subfig}
\usepackage{graphicx}
\begin{figure} \centering
\subfloat[A]{\includegraphics{...}} \quad
\subfloat[B]{\includegraphics{...}}
\subfloat[C]{\includegraphics{...}}
\subfloat[D]{\includegraphics{...}}
\caption{Figures}
\end{figure}
キャプションはオプションに.要素間のスペーシングが雑っぽい.渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 20 / 33
擬似コード
目次
1 基本理念
2 数式書き方並べ方
3 図表の配置
4 擬似コード
5 文章中のあれこれ
6 おわりに
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 21 / 33
擬似コード
擬似コード
実際に擬似コードを書く部分で用いるパッケージ algorithmicは古いパッケージ.algpseudocode等のパッケージが最新.
コマンド名がすべて大文字から単語先頭のみ大文字に変わるだけでほぼ後方互換性あり.
Algorithm 1 Compute ab
1: c← 12: while b ≥ 0 do3: c← ac4: b← b− 15: end while
\usepackage{algpseudocode,algorithm}
\begin{algorithm}
\caption{Compute $a^b$}
\begin{algorithmic}[1]
\State{$c \gets 1$}
\While{$b \geq 0$}
\State{$c \gets ac$}
\State{$b \gets b-1$}
\EndWhile
\end{algorithmic}
\end{algorithm}
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 22 / 33
擬似コード
Require, Ensure
algpseuocodeが提供する入力・出力を書くコマンドはそれぞれ\Requireと\Ensureで,当然名前の通りの出力になる.
変えたい場合は,出力される文字列を renewcommandしてやるのが cool(意味とデザイン分離の観点から).
\State{\textbf{Input:}} ...}のようにベタ書きでごり押さないこと.
\algrenewcommand{\algorithmicrequire{\textbf{Input:}}}
\algrenewcommand{\algorithmicensure{\textbf{Output:}}}
Algorithm 2 デフォルトRequire:Ensure:
Algorithm 3 変更済みInput:Output:
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 23 / 33
文章中のあれこれ
目次
1 基本理念
2 数式書き方並べ方
3 図表の配置
4 擬似コード
5 文章中のあれこれ
6 おわりに
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 24 / 33
文章中のあれこれ
文章の修飾
\subsection や \subsubsection を立てるほどではないけれど見出しが欲しい場合は\paragraph を使うとよい.
▶ \subparagraph まで存在するが,あまり使われない.
単語の強調でボールド体にしたいときは,{\bf hoge}でなく\textbf{hoge}.▶ イタリック(\textit),タイプライタ体(\texttt)も同様.▶ 英文で emphasizingのために斜体にする場合は\emphが好ましい.
下線は使わない.下線を引きたいという発想自体が legacy.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 25 / 33
文章中のあれこれ
参照・引用
必ず~を前につける.▶ ~は細い空白コマンド,かつ前後が改行されない効果をもつ.▶ [1]や [2]のような引用タグが行頭に来るのを防ぐことができる.
数式の参照は\eqrefコマンドを使う.▶ 定理環境内でも数式番号が斜体化しない.
Theorem 1. Eq. (1) versus Eq. (1).
ax = b (1)
\begin{theorem} Eq.~\eqref{eq} versus Eq.~(\ref{eq}).
\begin{equation} \label{eq}
ax = b
\end{equation}
\end{theorem}
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 26 / 33
文章中のあれこれ
強制改行
改行するコマンドといえば:
\\(ダブルバックスラッシュ)
\linebreak
の 2種類が主.これらには使い分けがある.
\\ 情報の区切りとしての改行数式・表組みの行を改めるときに使う.著者欄で名前と所属・メールアドレスを区切る改行もどちらかというとこっち.
\linebreak 折り返し位置を指定する改行.タイトルの改行位置を指定するときはこれ(スタイルファイルによっては受け付けないことがあったかも.)日本語スライドを作るときの改行タイミングの調整もこっち.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 27 / 33
おわりに
目次
1 基本理念
2 数式書き方並べ方
3 図表の配置
4 擬似コード
5 文章中のあれこれ
6 おわりに
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 28 / 33
おわりに
おわりに
まだまだ紹介したい小技はある.▶ コロンの使い分け,εと ϵ,lと ℓ, etc...▶ 日本語固有の問題.擬似コードのヘッダとか定理環境中の英字とか.▶ bibtex標準の bstファイル
困って調べて,解決法が「面倒だ!」と思ったらもう少し調べる.意外と思い通りになります(発表者談.)
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 29 / 33
文書以外のものを作る
目次
7 文書以外のものを作る発表スライドポスター
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 30 / 33
文書以外のものを作る 発表スライド
LATEXで発表スライド(・講義資料)を作る
LATEXで発表スライドを作るためのパッケージとしては beamerが実質スタンダード.
beamerは「プロジェクタ」のドイツ語訳らしい.
数式・参考文献をいつも通りに扱える(natbibパッケージで著者・年度形式の引用もできる).目次ページ作りたい放題.
▶ 自動で最新の状態が反映される.▶ (sub)section情報を使って,パート切り替えのたびに目次ページを挟める(現在地の強調ももちろん自動.)
ただし,日本語の扱いが難しい.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 31 / 33
文書以外のものを作る 発表スライド
beamer日本語対応への道
ほぼ必ず書いているプリアンブルの機能紹介
\documentclass[dvipdfmx]{beamer}
\usefonttheme[onlymath]{serif}
\usepackage[english]{babel}
\usepackage{pxjahyper}
\renewcommand{\kanjifamilydefault}{\gtdefault}
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 32 / 33
文書以外のものを作る 発表スライド
beamer日本語対応への道
ほぼ必ず書いているプリアンブルの機能紹介
\documentclass[dvipdfmx]{beamer}
\usefonttheme[onlymath]{serif}
\usepackage[english]{babel}
\usepackage{pxjahyper}
\renewcommand{\kanjifamilydefault}{\gtdefault}
重要度:高(チャレンジしてここで詰まって諦めるレベル)
\documentclass[dvipdfmx]{beamer} グラフィックスドライバとして dvipdfmxを使うことを明示.すなわち (u)platex & dvipdfmxで処理すべし.
\usepackage[english]{babel} 多言語化パッケージ.忘れると Theorem等のキーワードをどの言語で出力したらよいかわからずエラーを吐く.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 32 / 33
文書以外のものを作る 発表スライド
beamer日本語対応への道
ほぼ必ず書いているプリアンブルの機能紹介
\documentclass[dvipdfmx]{beamer}
\usefonttheme[onlymath]{serif}
\usepackage[english]{babel}
\usepackage{pxjahyper}
\renewcommand{\kanjifamilydefault}{\gtdefault}
重要度:中(動いたけど見た目が悪いので使えないと判断する程度)
\usefonttheme[onlymath]{serif} 数式だけセリフ体にする.beamerは標準で英文も数式もサンセリフ体にする.
\renewcommand{\kanjifamilydefault}{\gtdefault} しかし日本語のフォントのデフォルトは明朝体のまま.これをゴシック体にする.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 32 / 33
文書以外のものを作る 発表スライド
beamer日本語対応への道
ほぼ必ず書いているプリアンブルの機能紹介
\documentclass[dvipdfmx]{beamer}
\usefonttheme[onlymath]{serif}
\usepackage[english]{babel}
\usepackage{pxjahyper}
\renewcommand{\kanjifamilydefault}{\gtdefault}
重要度:低
\usepackage{pxjahyper} pdf変換した際にメタ情報の目次が文字化けするのを防ぐ.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 32 / 33
文書以外のものを作る ポスター
発表スライドが作れるなら……
Question Windowsで発表スライド作成に使われる PowerPointでのポスター作成もよく行われている.ならば beamerでもポスターが作れるのではないか
Answer 作れます.
LATEXでのポスター作成のために,beamerをポスター作成に対応させるパッケージbeamerposterがある.
渡辺 僚 (hokudai-ist-csit-prml) 現代的 LATEX コードのすすめ 基盤 (S) RA セミナー 33 / 33