はじめに
こんにちは,工学部計数工学科3年生の実数(@rityo_math)です.
これは物工/計数Advent Calendar 2020の12日目の記事です.
さて,この記事は作成者がプリアンブルで使っている設定について解説しています.この記事を書いた理由は,
- LaTeX のパッケージ布教
- ついでに LaTeX 初級者に基礎知識を与えることのできる記事があるといいなあ,と思った
アドベントカレンダーを10日以上滞納しているため
といったところです.この記事が「程よい」難易度設定になっているかは読者の意見を待ちたいところですが…….あと,比較的最近の TeXLive を使っていることを仮定して説明している箇所が多いので注意してください.一応 TeXLive 限定のところはその都度補足したつもりです.
プリアンブル
まず自分が使っているプリアンブルから貼りましょう.
\documentclass[uplatex,dvipdfmx,a4paper]{bxjsarticle}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{shadows}
\usepackage{otf}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{comment}
\usepackage{amsmath,amssymb,amsthm}
\usepackage{amsfonts}
\usepackage{mathtools}
\usepackage{bbm,bm}
\usepackage{hyperref}
\usepackage{pxjahyper}
\usepackage{physics}
\usepackage{float}
\usepackage{cancel}
\DeclareMathOperator{\Ker}{Ker}
\DeclareMathOperator{\res}{Res}
\let\Im\relax
\DeclareMathOperator{\Im}{Im}
\newcommand{\define}{\overset{\triangle}{\Leftrightarrow}}
\newcommand{\C}{\mathbb{C}}
\newcommand{\R}{\mathbb{R}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\Q}{\mathbb{Q}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\F}{\mathcal{F}}
% \middle の代わりに \relmiddle を付ける
\newcommand{\relmiddle}[1]{\mathrel{}\middle#1\mathrel{}}
\renewcommand{\thesubsection}{(\alph{subsection})}
\DeclareMathOperator{\llog}{\mathrm{Log}}
\allowdisplaybreaks[4]
\begin{document}
長いですが,一通り説明していきます.
1行目
本当はここはちゃんと本腰を入れて説明したいんですが,処理系の説明をし始めると記事がいくつあっても足らないので,外部サイトに丸投げしながら概略を説明していきます.
texファイルをコンパイルするとき,実はどの処理系でコンパイルするか,という選択肢があります.そしてこれによって Unicode に対応しているかや,組版の制御能力などが変わってきます.どういう処理系があるかはTeXWiki/LaTeX入門/発展編あたりを参考にしてください.Unicode なんてどうでもいいと思う人もいるかもしれませんが,「①」のような特殊文字が何の工夫も無しにそのまま入れられると考えれば割と魅力的だと思います.これができる処理系の1つが upLaTeX です. upLaTeX の良さについては @zr_tex8r さんの記事も参考にしてください.ここでは upLaTeX を使うために \documentclass
のオプション([]
の中身)に uplatex
を含めています.ただし, upLaTeX を使うためにはコンパイル時に使用する処理系も upLaTeX に切り替える必要があることに注意してください.
dvipdfmx
は画像出力まわりのためのおまじないのようなもので,ここで一度書いておけば後は書いておく必要はありません1.
本題
以下,本題であるパッケージの説明(布教)を始めます.が,その前にパッケージのドキュメント(英語)の探し方について説明しておきます.方法は2つあって,1つがCTANで検索し,出てきたパッケージのページのPackage documentを見る.もう1つは TeXLive 限定で,ターミナル(Windows は PowerShell)で texdoc (探したいパッケージの名前)
を打つ,というものです4.基本的に後者の方が楽なので後者を推奨します.
graphicx
パッケージ
画像や図を挿入するために必要なパッケージです.すぐ下のtikz
パッケージを読み込む場合はそのときに自動で読み込まれるので要らなかったりしますが,一応紹介しておきます.ところで画像を挿入する場合は PDF 形式で挿入すると,縮小によって画質が落ちるのを防げて便利だったりします.
tikz
パッケージ,付属ライブラリ
一言でいえば図や絵を描くためのパッケージです.あまりに多機能なので1つのパッケージに納めず,メインとなる tikz
パッケージといくつかの付属するライブラリに機能を分散させるという方法が取られています.詳細は公式ドキュメント(1320ページあるので容量注意)を参照してください.ここでは,ライブラリの1つ shadows
ライブラリを \usetikzlibrary{shadows}
によって読み込んでいます.自分が実際に絵を描くときは一旦mathcha.ioの Drawing Area 機能で描いてからそれを TikZ 出力したものをコピペしてくる,といった使い方をすることが多いです5.容量が巨大すぎて読み込みに時間がかかるので,絵を描くときだけ読み込むようにするのが良いかもしれません.
otf
パッケージ,fontenc
パッケージ,lmodern
パッケージ
先ほどの @zr_tex8r さんの記事の通りです.フォントメトリックとフォントエンコーディングがいい感じになります.lmodern
は欧文フォント限定の話なので,日本語でしか使わない人は入れなくてもいいかもしれません.
comment
パッケージ
コメント環境を定義してくれる.LaTeX では行中に %
を入れることでそれ以降をコメントアウトしてくれるが,実は複数行のコメントアウト機能はデフォルトでは実装されていません.これを可能にしてくれるのがこのパッケージで,\begin{comment}
~\end{comment}
の中身がすべて無視されます.素敵ですね.「それくらいデフォルトで実装しろ」とか言ってはいけません.
ams系パッケージ
非常によく使われるので詳しくは説明しません.LaTeX のデフォルトに入っていない二項演算子もだいたい amsmath
,amssymb
に入っていたり,あとは align
だとか cases
といった数式環境も全部 amsmath
によるものです.amsmathの数式環境まとめは一度目を通しておくと良いでしょう.
mathtools
パッケージ
あまり知名度は無く,マニアックなコマンドが多いパッケージです.例えば,矢印の上下に文字列を置きたく,さらに文字列の長さに応じて矢印が伸縮してほしいときに使う
bbm
,bm
パッケージ
bm
は太字ベクトルを書きたいときに便利なパッケージです.単純に \textit{\textbf{a}}
などどするよりもスペーシングがいい感じになるので素敵です.bbm
は \textbb{1}
にあたるものが欲しくなったときに1度だけ使いました.
hyperref
パッケージ,pxjahyper
ハイパーリンクを挿入したいときとか単に URL を貼りたいときに使います.これも詳細な説明は公式ドキュメントを読んでください,ということになるんですが,日本語の場合はちょっと特殊な扱いが必要になります.
これまた詳しくは外部サイトに丸投げするんですが,一言でいえば日本語が文字化けを起こすのを防ぐために pxjahyper
パッケージも読み込んでください,ということになります.また,URL に特殊文字(&
や%
など)が含まれている場合の対応方法のところも合わせて読んでおくと良いと思います.
physics
パッケージ
「たまにTwitterで便利パッケージとして流れてくるパッケージ第1位」であるところのphysics
パッケージです.詳細な説明は分かりやすい公式ドキュメントに丸投げしてしまいますが,特に便利なのはやはり偏微分でしょう.本来は\frac{\partial}{\partial x}
などと書く必要があるのが\pdv{x}
だけで済むようになります.後はブラケット記法なんかも充実しています.公式ドキュメントに一度目を通しておくと良いでしょう.
float
パッケージ
画像を「何が何でもこの場所に置きたい!」というときに使うパッケージです.デフォルトでは\begin{table}[h]
や\begin{figure}[h]
とオプションを指定すると,「可能ならこの場所に入れる」くらいの意味合いしか持ちませんが,このパッケージを読み込んでh
をH
に変えると「かならず」その場所に配置されるようになります.ちなみにかつてはこれと同機能を持つhere
というパッケージがあったのですが,実態が変わったようです.
cancel
パッケージ
このパッケージ名は「この項がキャンセルする」の cancel です,つまり打消し線です.これは実物を出した方が分かりやすいと思うので貼っておきます.\cancel
,\bcancel
,\xcancel
だけの組み合わせですがこれくらいのことが可能になります.
\DeclareMathOperator,\newcommand
まず,新しいコマンドを定義したい場合は\newcommand{(定義したいコマンド)}{(そのコマンドの内容)}
という構文で定義することができます.
ただし,引数が入る場合や定義したい名前のコマンドがすでに存在する場合,定義したいコマンドの前後に「ちょうどよい」空白が欲しいときはこの限りではありません.引数が入る場合については\relmiddle
のものを参考にしてください6.その他の話は学科の先輩がblogで分かりやすく解説してくださっていたので,そちらを参照してください.
\allowdisplaybreaks[4]
align
環境は非常に便利なのですが,デフォルトでは式の途中で改ページを許さないというちょっと困った性質があります.つまり,半ページほど残った状態で1ページ近くある数式を連続して書くと,半ページ分が丸々飛ばされて次のページから数式が始まります.この\allowdisplaybreaks[i]
のi
($0\leq i\leq 4,\ i\in\mathbb{Z}$)が改ページのしやすさを表していて,デフォルトが0です.先ほどの「困った性質」を避けるために上のプリアンブルではもっとも改ページが起きやすくなるように,すなわち4に設定しています.
定理環境が欲しいとき
スペースの関係でコードの説明が難しいので自分が1年前に書いた記事に丸投げします.(ごめんなさい)(実際は TeX コマンドを使ってもっと複雑なことになっているが,本質的にはこの記事及びその参考文献と同じです).
ソースコードを貼りたいとき
アルファベットだけのコードならば listing
パッケージを使えば大丈夫です.しかし,コメント等で日本語が入ってる場合は jlisting
パッケージを使う必要があり,こいつは 2020 年現在 TeXLive には含まれていません.
なのでこのパッケージをこういった場所から落としてくる必要があります.ググればいろいろ出てくるんですが,一番安直な設定方法はダウンロードした jlisting.sty を tex ファイルと同じ場所に置くことです.ちゃんとやりたいならTeXWiki/LaTeX入門/各種パッケージの利用あたりを参考にしてよしなに設定してください.
後日,TeXLive にもjvlistings
パッケージがあるということを知りました.基本的にはこちらで代替できると思います(2022年4月7日追記).
フォント埋め込みをするといい話
前々から「1つ記事を書くほどでもないけどどっかには書いておきたいなあ」,くらいの気持ちでいたのでついでにここで書いておきます.LaTeX では最終的に PDF を生成するわけですが,このときに PDF にフォントを埋め込むようにすると良いという話があります.理由は単純で,埋め込みを行わないと PDF を開くビューワーの設定のフォントで読み込まれるために見栄えがかなり違って見える,ということが往々にして起こるためです.
設定自体はこのあたりに詳しく記載されています.なお,この設定による副作用として生成される PDF ファイルの容量が大きくなることがあります.そこだけは注意してください.
最後に
自分が使っているパッケージを説明(布教)するという目標は達成できましたが,処理系の違いにまで突っ込んで説明ができなかったのが悔やまれるところです.まあ『LaTeX2e 美文書作成入門』に軽く書いてあると言ってしまえばそれまでなんですが…….
更新履歴
2022年4月7日 hyperref, physics パッケージの公式ドキュメントのリンクが切れているという指摘をいただいたので修正.さらにjvlistingsパッケージについて追記.
-
他のパッケージを読み込むときに
\usepackage[dvipdfmx]{graphicx}
とかするとエラーが起きます.詳しくはこの記事を参考にしてください.また,XeLaTeX や LuaLaTeX のような処理系はそもそも dvipdfmx を書く必要がありません.
a4paper
は出力するファイルの印刷サイズ指定で,A4 の紙で印刷するように書いてあります.そのままですね.
ここのオプションは他にも画像のサイズだけ確保して画像本体を読み込まないことでコンパイルを高速化するdraft
とかがあるので,暇な人は調べてみてください2. ↩ -
調べるなら『LaTeX2e 美文書作成入門』が良いと思います.ネット記事はドキュメントクラス(後述)による違いに言及しているものが少ないので…….
最後にドキュメントクラスについても解説します.ドキュメントクラスは一言でいえば,tex ファイルの種類を指定するためのものです.例えばこれまで使われてきたクラスでは,jsarticle
は論文やレポート向け(章を持たない),jsreport
は長めのレポート向け(章を持つ),jsbook
は書籍向け(ページの偶奇によってレイアウトを変えられる),といった感じです.詳しくはjsclasses
のドキュメントを参照してください.これらは広く使われているのですが,pLaTeX,あるいは upLaTeX に依存しているという欠点を抱えていました.そこで最近になって Bxjsclsという,どの処理系にも対応できるドキュメントクラスが開発されました.処理系の切り替えが簡単に行えることがメリットの1つです.そのため,ここではその1つであるbxjsarticle
クラスを用いたコードを示しました.もちろんjsarticle
クラスなどを用いても良いのですが,このプリアンブルのように同時にotf
パッケージを読み込んでいる場合はフォントメトリックの設定上,うるさい警告が大量に出るのが難点です3. ↩ -
もちろん Warning を表示しないように設定することもできます.
\DeclareFontShape
というコマンドをプリアンブルに書き連ねることになるのですが,詳細はTeXWiki/よくある質問#bf583189を参照してください. ↩ -
これで何も出なかったら使っているディストリビューションが TeXLive ではないか, PATH が通っていないか,あるいはそのパッケージがインストールされていない,あたりを疑うと良いと思います. ↩
-
欠点として,TikZ コードに変換する段階でテキストの位置がズレやすいことが挙げられます.仕様を理解していれば自力で調整できるレベルではありますが……. ↩
-
ちなみにこの
\relmiddle
は集合の内包的記法(例:$\{x\in\mathbb{R}|0\leq x\leq 1\}$)に出てくる縦棒のためだけに定義されたものです.といってもこのページのものをそのまま持ってきただけです.演算子の扱いに関する解説は面白いと思うので TeX 使い(を目指す人)にはオススメです. ↩