競技プログラミング記事を書きたい人のための数式の書き方入門
はじめに
この記事を読んでいる方の多くは、これから競技プログラミングに関する記事を書こうと思っていることでしょう。とても素晴らしいことだと思います。しかし、(分野によってある程度の差はあるだろうとはいえ)数式を書くには一般的な作法というものがあります。せっかく力を入れて内容を考えた記事も、これらの作法を守らないと「読みにくい記事だな」と思われて途中で読むのをやめられてしまうかもしれません。(あるいは自分で読み直して同じことを思うかもしれません。)これは、頑張って記事を書いた人にとっても、些細なことで読む気力を削がれてしまった読者にとっても不幸なことです。
この記事はそういった不幸なことが起こらないように、数式に関する基本的な書き方や作法を紹介するものです。特に、競技プログラミングで頻出の書き方に焦点を当てているので、リファレンスのような感じで役立てていただけたらと思います。
TeXについて
TeXは、世界で最も有名なDonald E. Knuthが開発した組版処理システムです(詳しくはWikipedia参照)。科学技術の論文を書くために最も一般的なツールではないでしょうか。一般的なブログサービスのはてなブログや、Qiita、Zennでも数式を書くためにTeXの記法を(一部)使うことができます。
この記事ではTeXによる数式の書き方を紹介します。各ブログサービスにおけるTeXによる数式の入力方法は、ブログサービスのヘルプページを確認してください。
変数、関数
x
、y
、f(x)
と入力するだけで上手に表示されます。\pi
と入力します。
略語由来の関数
略語由来の関数
入力は \sin \theta
、\log n
、\exp(x)
のようにします。
もし \mathrm{id}(x)
と書きましょう。本当は\mathop{\mathrm{id}}(x)
とすべきようですが、マクロの使えない環境下ではそこまでやらなくてもいいでしょう。
すこし面倒ですが、\mathrm{dp}[i][j]
と書いてある方が僕は好きです。
2つのmod
\bmod
と \pmod
があります。\bmod
は2つの数に対する演算として使います。例えば、
は5 \bmod 3 = 2
のように入力します。
\pmod
は
は5 \equiv 2 \pmod{3}
のように入力します。無理やり\bmod
を使って、5 \equiv 2 (\bmod 3)
のように入力すると、次のようになります。
上の例に比べて読みにくいと思います。
下付き文字と上付き文字
x_i^n
のように入力します。なお、基本的に_
や^
の後の1文字だけしか下付き・上付きになりません。x_{i+1}^{n-1}
のようにします。TeXにおいて{}
は文字列をグループ化する役割で使われており、表示されません。\{\}
のようにバックスラッシュをつけます。
てんてん
と書きたいときはx_1 + x_2 + \dots + x_n
と書きます。
と書きたいときは\{x_1, x_2, \dots, x_n\}
と書きます。とりあえず、\dots
と打っておけば、うまい具合にやってくれるようです。
ここで1つ注意事項があります。
集合
a \in A
、A \subset B
と書きます。
は\overline{A \cup B} = \overline{A} \cap \overline{B}
と書きます。補集合はA^c
と入力しましょう。
A \setminus B
と書きます。空集合を格好良く \emptyset
を使いましょう。
集合の内包表記を使って
のように書きたい場合は \mid
を使って、\{ x^2 \mid x \in \N \}
としましょう。|
を使うと、これは絶対値の括弧と認識されて、下の例のようにスペースが少しおかしくなります。
大小
a \le b
、c \ge d
と入力します。等号を含まない場合は<
、>
でOKです。
ちなみに \langle a, b \rangle
を使いましょう。
総和、総積
は\sum_{k=1}^{n} k
と書きます。総積
は\prod_{k=1}^n k =n!
のように書きます。
括弧
床関数 \lfloor x \rfloor
、 \lceil x \rceil
と入力します。
また、対応する括弧に \left
\right
をつけると、括弧の大きさを自動で調節してくれます。例えば、分数を入れてみます(\left(\frac{a}{b}\right)
)。
これは、入れ子にしてもうまく動きますし、括弧に分類されるものであればなんでも使えます(\left\lfloor \left| \sum_{k=1}^n (-1)^k \frac{1}{k} \right|^3 \right\rfloor
)。
この式に特に意味はありません。
演算子
掛け算の記号 \times
と入力します。ビットごとの排他的論理和でよく使われる \oplus
と入力します。
論理
論理演算における and \land
、\lor
、\lnot
です。
最後に
競技プログラミングの解説を書くときに使いたくなりそうな数式の書き方をまとめてみました。ここに載っていないものでも、「TeX 入力方法」と検索すると出てくると思います。また、詳しそうな人に聞いてみるのも手です。「こんな数式の書き方も載せておいてほしい」というリクエストにも可能な範囲で応えたいと思っています。
大学の図書館が使える人は、LaTeX美文書作成入門を、必要なときにぱらぱらめくってみるのもいいでしょう。
数式の作法を守って、楽しい競プロライフを!
参考文献
更新履歴
- noshi91さんの意見をもとに、括弧の節を追加。(2024-05-15)
-
elnikkisさんの指摘で、
\dots
の使い方を修正。(2024-05-15) - 演算子と論理の節を追加。(2024-05-15)
-
rsk0315_h4xさんの意見をもとに、
の前後の注意事項を追加。(2024-05-16)\dots - kkddさんの指摘をもとに、変数・関数、略語由来の関数の節のタイトルと記述を修正。(2024-05-16)
- 下付き文字と上付き文字の節を追加。(2024-05-16)
Discussion
こんにちは。
イタリック体の使い方は「数学的な変数(と変関数)のシンボルをイタリック体とする」のようです(https://texwiki.texjp.org/?表記の哲学 より)。
なお「1文字からなる関数名」との説明は適切ではなさそうで、広めない方が良さそうです。この説明はどこかで見かけるでしょうか?(私も昔見かけた気がしますが)
ありがとうございます。変関数って呼ぶんですね。知らなかったです。
こんにちは。
この「変関数」は、定義された関数ではないものをさしていますが、その呼び名は一般的ではないと思われますので広めない方が良さそうです。
そうなんですね。修正しました。
こんにちは。\uppi 、\sin ですが、慣習上、必ずしもそうしないこともあるようです)。
upright 体と italic 体との使い分け規則につきましては、constant と variable とを区別する考え方を、関数にも適用すると思えば良いかと多います(したがって constant の該当例は、
「略語由来」という説明も確かに見かけますが、遡っても ISO 由来ではなさそうです。急いで御記事を書くよりも、ゆっくり調べをつけてからが良いかと思いました。