日常のカフスボタン

みたらし団子

LaTeX と Typst を比較してみよう

LaTeX と Typst はともにテキストファイルから PDF を出力できる目的や方法が卑近なツールです。

これらにはよく知られた違いがいくつかありますが、これらの違いが明文化されている記事は無いようでした。 そこで、この 2 つのツールをさまざまな点で比較してみました。

注意:本記事は LaTeX と Typst のどちらが良いツールかを検討する記事ではありません。単に比較することのみに終始することに注意してください。

環境構築

LaTeX を利用するには、以下のようなディストリビューションをインストールする必要があります。(W32TeX は配布終了しました)

  • TeX Live
  • MacTeX
  • MiKTeX
    • ...and more

TeX Live のインストールには少なく見積もっても 1 時間弱、フルスキームに至っては 2 時間強ほど必要です。これは、多数のパッケージやフォント、それらのガイドドキュメントをダウンロードするためです。 結果としてフルスキームでは 8GB 近いものになります。(これによって、どの PC であっても同じパッケージやフォントが揃った状態をオフライン環境で再現できるようになります。)

TeX ディストリビューションは、TDS (TeX Directory Structure) と呼ばれるディレクトリ構成に従っています。特に TeX Live のディレクトリ構成は “texmf ツリー” と呼ばれています。

この texmf ツリーに独自のパッケージや文書クラスを含めたい場合には、適切なディレクトリにファイルを置いて mktexlsr を実行する必要があります。初心者にとっては若干複雑です。

また、TeX Live は毎年(概ね 3~4 月くらい)にバージョンが変更されます。このバージョン変更はその前のバージョンを引き継ぐものではなく、まったく新たに構築する必要があります。これは、毎年数時間かかる環境構築をする必要があることと同義です。

LaTeX のパッケージや文書クラスは CTAN で集積・公開されています。


Typst を利用するには、Typst を実行するバイナリだけがあれば良いです。

最も平易な方法は、リポジトリの Release ページから最新のビルド済みバイナリをダウンロードし、バイナリのあるディレクトリにパスを通せば完了です。

あるいは、winget や brew 等のパッケージマネージャを使ってインストールする方法も展開されています。

Typst では、いずれの方法であっても 3 分もあれば完了します。

また、Typst にもパッケージが数多く存在しますが、これらは必要なドキュメント内で #import "@<namespace>/<package name>:<version>" としたとき、そのパッケージの特定バージョンが自動的にダウンロードされます。 これらのパッケージは OS 毎の データディレクトリキャッシュディレクトリ にインストールされます。(参考

Typst のパッケージやテンプレートは Typst Universe に集積・公開されています。

フォントはローカルにインストールされたもの、あるいはコマンドラインで指定したディレクトリにあるものを利用できます。

ただし、オフライン環境や異なる PC 間でファイルを共有する場合、ローカルにないパッケージやフォントは利用できないため、同じ結果を得られない可能性があります。

異なる PC 間で共有する場合は、オンラインエディタDocker を利用すると良いでしょう。

バイナリの種類

LaTeX にはバイナリに種類があります。例えば、以下のようなものがあります。

  • pdfLaTeX
  • XeLaTeX
  • LuaLaTeX
  • (u)pLaTeX

バイナリ毎にそれぞれ対応するパッケージや得手不得手があり、初心者にとって非常に難解になりがちです。

また、日本語 LaTeX の代名詞とも言える (u)pLaTeX の出力形式は、PDF ではなく DVI であるため、DVI から PDF に変換する DVI ドライバ(多くは dvipdfmx)も気にする必要があります。

一方で、Typst には typst しかありません。非常に簡単です。 日本語に対応しているかどうかはフォントに依存しています。

構文

LaTeX の構文は \ から始まる “コマンド” と \begin{...}\~\end{...} の “環境” からなります。 また、コマンド・環境はともにオプション引数を受け付けるものもあり、引数は key-value 形式 (key = value) を採るものもあります。

独自のコマンド・環境の定義も可能ですが、定義方法は複数あり、初心者にとっては難解に感じるかもしれません。 また、key-value 形式の引数をもつものを定義するには少し面倒です。


Typst の構文は # から始まる “関数” があります。また、これらを簡易的に表現する糖衣構文もあります。そのため、簡単な文書であれば Markdown のような執筆体験を得ることになるでしょう。 オプションは : で区切る形式 (key: value) によって指定します。

独自の関数の定義も可能で、特定のオプションを課すことも出来ます。定義方法は #let のみです。

また、Typst は LaTeX のようにプリアンブルのような出力する文章とは異なる領域を有していないため、文章だけでも PDF を出力できます。

基本的な編集

PDF 文書における基本的な編集とは、次のようなものを指します。

  • ページサイズ・余白の指定
  • フォント変更
  • 文字の色変更
  • 画像の挿入
  • ハイパーリンクの挿入

Typst では、これらを組み込みの関数から変更することが出来ますが、LaTeX では適当なパッケージを把握して利用する必要があります。

  • ページサイズ・余白の指定 ⇒ geometry
  • フォント変更 ⇒ フォント用パッケージまたは fontspec、unicode-math
  • 文字の色変更 ⇒ (x)color
  • 画像の挿入 ⇒ graphics, graphicx
  • ハイパーリンクの挿入 ⇒ hyperref

この意味では、Typst の方が基本的なスタイルの変更にアクセスしやすいと言えるでしょう。

エラーメッセージ

LaTeX のエラーメッセージが難解であることは非常に有名です。

特に、LaTeX が生成するメッセージはエラー箇所を特定していないため、二分探索的にエラー箇所を捜索する必要があります。 あるいは、ChatGPT に訊く方法もかなり有効な手立てらしいです。

Typst はエラーの原因となっている部分を明確に教えてくれます。 メッセージを読めば自力で解決できる可能性が高いです。また、適切な LSP を利用することで基本的な文法エラーや未定義関数の利用を避けることが出来るため、エラーに出会うこと自体を減らすことが出来ます。

文献・索引

LaTeX における文献や索引の作成は、LaTeX とは異なる外部の BibTeX や mendex を使うことで簡単に行えます。(もちろん、これらを手動で作成することも出来ますが、数が多いとあまり現実的ではありません)

BibTeX や mendex はリスト作成を自動化するのに便利ですが、一方でエラーに悩まされることもあります。


Typst における文献は、組み込みの bibliography 関数 を用いることで文献リストを作成できます。これは、Typst 以外の外部ツールを利用する必要が無いことを意味します。

また、索引はパッケージの in-dexter を利用して実現できますが、Typst そのものを実行するだけで索引を作成できる点は変わりません。 LaTeX では考えられない現象が発生します。

PDF の生成速度

最終的な成果物として得られる PDF の生成時間は LaTeX と Typst で大きく異なります。

LaTeX ではどれだけ軽い文書であっても数秒、長いものでは数分から 1 時間弱かかるものまであります。

また、相互参照や文献引用、索引作成あるいは TikZ 等がある場合、複数回 LaTeX を実行する必要があります。これは実行した際に作成された中間ファイルを読む必要があるためです。 そのために、その分だけ余計に時間がかかってしまいます。


Typst では、軽い文書では 1 秒もかかりません。大きい文書であっても LaTeX と比べれば相当に早いでしょう。(大きい文書では試したことがありませんが、生成速度が文書量に対して線形であることを想定しています)

また、相互参照等があっても 1 回の実行で PDF が生成されます。ここで中間ファイルも作成されません。 LaTeX では考えられない現象が発生します。

外部言語との連携

LaTeX では、--shell-escape をすることで LaTeX 外の言語を LaTeX から利用できます。例えば、pythontex では Python や R 等、LuaLaTeX ではネイティブに Lua を利用できます。 加えて、Purified EPS (PostScript) はすべての TeX でネイティブに扱うことが出来ます。

Typst でも pyrunner を利用することで Python を実行することが出来ます。ただし、--shell-escape のようなオプションは必要ありません。 また、デフォルトで基本的な算術くらいは出来ます。

これまでの資産・知識

LaTeX1984 年にリリースされ、現在のバージョン LaTeX2e は 1993 年にリリースされました。 そのため非常に多くの資産や知識があり、これらの資産は現在の LaTeX であっても動作します。

ただし、現在の LaTeX は LaTeX2e から LaTeX3 への過渡期であり、モダン LaTeX ではこれらの資産が意味をなさない可能性もあります。


Typst は 2023 年 3 月に β 版がリリースされました。そのため資産や知識はまだ少ないです。

まだ若いため、破壊的な変更がなされることも少なくありません。この影響を受けて、知識を常に更新し続ける必要がある状況がそれなりの期間で続くでしょう。

今後の発展

LaTeX は現在のバージョン LaTeX2e から LaTeX3 への転換期を迎えています。

LaTeX3 の大きな目的は、LaTeX2e にレイアウト設計とプログラミングの境が無いことに対して、これらの階層を分けようと言うものです。

執筆者側に大きな変更は無いと予想されますが、LaTeX3 への移行に伴って TeX 本体やパッケージが書き換えられるために、日本語用のパッケージや (u)pLaTeX が対応できない可能性が指摘されています。(これが “pLaTeX がヤバい” と言われる所以です)

LaTeX3 の開発状況に関しては LaTeX3 のリポジトリ を見ることで確認できます。


Typst は現在も破壊的な変更を含みながら開発されており、具体的な計画は Roadmap で公開されています。例えば、現在の出力形式 (PDF, PNG) の他に HTML や EPUB による出力が検討されています。

現在、Typst は開発段階であり LaTeX よりも機能面で劣っている部分もありますが、ある程度の時間が経てば改善されていくでしょう。

タグ付き PDF

LaTeX と Typst が共に大きく興味がありそうなトピックは PDF アクセシビリティに関する “タグ付き PDF (tagged PDF)” でしょう。

文書の各部分に、部・章、見出し、引用、箇条書き、表などの構成上・意味上の役割を与えることを文書の構造化という。文書の構造化により、読み手が意味をより理解し易くなる。

タグ付きPDFは、内部に文書構造を指定するタグを付与した PDF のことである。タグ付き PDF では、PDF の中でテキストや画像などのコンテンツをマークで囲い、マークにタグを付与する。また、文書の階層や表などの構造を表すタグを定めて、構造を表すタグとコンテンツを表すタグを使ってタグのツリー構造(タグツリー)を作成する。

—— アンテナハウス PDF 資料室 より

タグ付き PDF は視覚的な機能ではなく、文章を構造化し意味を持たせることで、アクセシビリティを向上させることにあります。

具体的なタグ付き PDF で出来ることは、以下のようなものがあります。(アンテナハウス PDF 資料室 より)

  • PDF の内容の読み上げ順序の指定
  • PDF を変換して再利用する
  • PDF のリフロー表示
  • アクセシビリティサポート

タグ付き PDF 自体は PDF のオプションですが、タグ付き PDF のアクセシビリティ性の高い文章の方が広い人に読みやすいものになると考えられます。

また、より詳細なタグ付き PDF に関しては、 Overleaf の記事 を参照すると良いでしょう。


LaTeX におけるタグ付き PDF に関する機能は開発段階ですが、タグ付き PDF に関するパッケージは CTAN の Accessibility Support で見ることができます。加えて、タグ付き PDF の開発状況は tagpdf を見ることで確認できます。

Typst では、リポジトリでタグ付き PDF について Issue が挙がっていますが、実装には至っていません。Stack Exchange のある回答 には、Typst が初めからタグ付き PDF をサポートされていないことに苦言が呈されたりしています。

余談

結局どちらの方が良いのだろうねという話でした。

当然、“良い” という評価がどの部分を見るかによって異なるため、人によって「慣れている LaTeX の方が良い」という意見もあれば、「Typst の方が記法が簡便で使いやすい」という意見もあるでしょう。

しかしながら、学会やジャーナル等に提出する必要があるような人にとっては LaTeX から離れるのは先のことになるでしょう。

また、数式に関しては MathJax や KaTeX など LaTeX の記法に準拠したレンダリングツールが展開されているのに対して、Typst の記法に準拠した数式レンダリングツールは未だ存在していません。 これを踏まえると、Markdown 等で数式をレンダリングするためには LaTeX の記法を知っておく必要があります。

LaTeX は本当にさまざまなところに影響を与えているため、Typst だけ知っているだけでは不十分になることは多分に出てくるでしょう。

どちらも使えるようになっておけば便利です。どちらもある程度使えるようになっておきましょう。

数式の無いドキュメントに LaTeX を使うことは意義があるのか

しばしば、LaTeX を使うことの意義として「数式があるから」が挙げられます。これは実際、LaTeX で数式を書くことで綺麗にレンダリングされるからです。TeX を開発した Knuth は数学者であり、数式に関する写植にはこだわったことでしょう。

かと言って「LaTeX は数式のためだけに利用されるのか」と言う疑問に単刀直入に答えるのであれば “No” です。LaTeX は数式を記述するためのみに利用されるべきツールではありません。

また、「MS Word で良いのでは?」と言う声(Twitter での声)も聞かれますが、数式以外にも LaTeX にはさまざまなメリットがあります。

本記事では、「LaTeX が数式のためだけにあるツールではないこと」や「MS Word には無い LaTeX のメリット」を紹介します。

MS Word でも数式ができる

そもそも MS Word でも数式を書くことが出来ます。マウス操作でポチポチする方法とキーボードによる LaTeX 入力の 2 通りがあります。

LaTeX 入力があるのは、LaTeX の歴史が長く、プレーンテキストで入力する方法として、ほぼデファクトスタンダードとなっているためです。

MS Word では数式が汚いと言われることもありましたが、これはフォントを変更することで大きく解消できます。New Computer Modern Math や STIX Two Math に変更すると良いでしょう。単純にデフォルトの Cambria Math が汚いと思われる原因の 1 つだったようです。

このことを踏まえれば、数式のためだけに LaTeX を使おうとはなり難いです。(実際は数式として表現できる幅が LaTeX に比べて狭いかもしれません)

数式以外の LaTeX を使うメリット

数式以外であっても MS Word にない LaTeX を使うメリットがさまざまあります。LaTeX が MS Word と比べてメリットとなる点は以下のようなものです。

  • テキストファイルである
    • Git によるバージョン管理が可能
  • 任意のテキストエディタを利用できる
  • 数式や図表の番号が自動採番される
  • 相互参照が容易
  • 目次や文献参照、用語集などの処理が自動的に作成・更新できる
  • コメントアウトができる
  • 単純なドキュメントからポスター、スライド資料など作成できる
  • テンプレートを使いまわすことが出来る
  • ドキュメント内部で他のプログラミング言語が利用できる

特に、MS Word ではドキュメントを作成する際には、フリーズしたりデータが消失すると言ったような事態が発生することがあります。一方、LaTeX はテキストファイルであるため、このような問題はほとんどまったく発生することがありません。

加えて、LaTeX における自動採番や相互参照、目次や文献参照、用語集などの処理は \label\ref のようなコマンドの形でパターン化されているため、覚えてしまえばそれほどの苦になりません。テキストエディタによっては、適切な補助を与えてくれるものもあります。

一方 MS Word でこれらを行うには、非自明なマウス操作を繰り返し行う必要があります。また、採番を更新するにも同じ操作を繰り返さなければならない可能性をはらんでいます。(プロの MS Word-er は簡単に操作できるのかもしれませんが)

このように、LaTeX には「数式のために利用する」以外の多くのメリットが挙げられ、これらを得たいがために LaTeX を利用している人は多いでしょう。


そうは言っても、デメリットや嫌煙される原因も数多く挙げられます。MS Word で十分だと主張する人にとっては既知の事項でしょう。

  • 環境構築が面倒
  • 学習コストが MS Word よりも高い
  • 一般企業では LaTeX は利用されないため、習得価値が見いだせない
    • アカデミアと趣味以外に利用されるシーンが極端に少ない
  • どの LaTeX を利用すれば良いか分からない
  • タイプセット時のエラー処理が面倒
    • 二分探索的に原因を探す必要がある
  • 即時プレビューができない
    • タイプセットに時間がかかる
  • フォント変更が面倒

特に、「学習コスト」に関しては MS Word よりも高いと思います。習熟にはそれなりの期間を要します。また、これは少なくない LaTeX に関する学習の他にも、周辺ツールを知っておく必要が出てくることも加味するべきでしょう。

周辺ツールとは具体的に次のようなものを指しています。

  • ビルドツール(latexmk、llmk、ClutTeX など)
  • フォーマッタ(latexindent)
  • Git(バージョン管理ツール)および GitHub
  • 文章校正ツール(textlint、Grammarly など)
    • and more...

これらは必須の学習項目ではありませんが、知っているとより便利で完成度の高いドキュメントを作成できます。(もちろん内容が第一ですが)

かたや MS Word では、ビルドツールやフォーマッタは不要であり、バージョン管理や文章校正は内蔵されているため、周辺ツールとして知っておく必要もなく利用することになります。(ただ、内蔵のバージョン管理はあまり強くないらしい)

LaTeX の強みは何か

数式以外でも LaTeX を使うことのメリットを紹介してきました。

これに加えて、LaTeX の強みに関しても言及しておきたいと思います。ただし、これらは LaTeX に限らずテキストファイルで作成できる(いわゆる WYSIWYM)ツール全般に言えることです。

LaTeX の強みは以下の 2 点でしょう。

  • 体裁と文章の分離
  • 長期的な編集

これらについてそれぞれ詳細に強みを確認しましょう。

体裁と文章の分離

MS Word は 見たままに編集することで欲しいものを得られるため、WYSIWYG (What You See Is What You Get) ツールと呼ばれます。このような WYSIWYG ツールは体裁と文章を分離することが出来ず、常に文章に手動で体裁を与える必要があります。(ホームタブのスタイルから指定する)

このため、体裁と文章を分離できない弊害として、体裁の調整に気が散ることも挙げられます。LaTeX は文章を作成しているときに体裁を強く気にする必要が無いため、文章に集中できると感じる人もいます。

LaTeX では、スタイルは文章内でコマンド (e.g. \chapter{目的}) によって指定します。人に依ってはこのような指定が面倒だと感じるようですが、このようにしておくことで特定のスタイルに変更し自動的に採番なども行います。

逆に、LaTeX で体裁を自分で調整しようと思うと、非常に面倒になる可能性があります。ここはデメリットになりがちです。しかし、テンプレートのままで良いとするならば、体裁には一切触れず文章のみに専念することが出来ます。

また、体裁の異なるテンプレートを与えられても、文書クラス等を変更するだけで対応できるようになります。

長期的な編集

長期的な編集とは、卒業論文のような約 1 年かかるようなドキュメントを作成することを指します。

先に挙げたメリットと対応させて考えると、以下の点が「長期的な編集」で重要に挙げられるでしょう。

この 2 点について個々を掘り下げてみたいと思います。


長期的な編集にバージョン管理は不可欠です。LaTeX はテキストファイルなので Git によるバージョン管理が可能です。これに加えて、GitHub 等の Git ホスティングサービスを利用するとバックアップも取れて良いです。

しばしば手動でバージョン管理された MS Word は、管理として以下のようなダメダメになっていることがあります。

.
├─ 卒論_完成版.docx
├─ 卒論_最終版.docx
└─ 卒論_修正版.docx

どれが最新のファイルか分からず、もはやネタにされています。やっている本人が分かっていれば良いのですが、往々にして分かってないこともあります。分かっていると思って分からなくなったときは最悪です。

Git によるバージョン管理は、このような状態を回避することが出来ます。

実際、LaTeX ドキュメントをバージョン管理をしていて、特定のバージョンに立ち返ることは少ないかもしれませんが、バックアップとして取ることは重要です。GitHub によるホスティングがバックアップの代替になるという面もあります。


LaTeX ではコメントアウトすることが出来ます。

コメントアウトとは一部の文章を結果 (PDF) に反映されない形でファイルに残すことのできる記法です。LaTeX では、% より右側の文章はコメントアウトになります。

コメントアウトの形で文章を残すことで次の点がメリットになります。1

  • 推敲した記録を残しやすい
  • 文章を差し替えしやすい

気に入った言い回しや指導教員に修正を指示された箇所、途中式など、単純に削除してしまうには惜しい部分はコメントアウトしておくことが出来ます。もしも後になって欲しくなった際は、すぐに取り戻すことができます。推敲する際のコメントアウトは非常に有用です。

また、TODO をファイル内に残すと言った手法もなされたりします。(参考

MS Word ではこのように修正前情報を残すことは出来ません。(PDF に反映されない形のコメントは存在します)

何を基準に使い分けるか

LaTeX と MS Word のメリット・デメリットを紹介しましたが、なんでも LaTeX で作ってしまえば良いというわけではありません。適材適所があります。では、LaTeX にとっての適所、MS Word にとっての適所はどこでしょうか。

本記事ではこの適材適所に関して、“How to Turn your Text into a Powerful LaTeX template.” の終盤にあるグラフを引用したいと思います。

このグラフは、縦軸に作成コスト (Effort)、横軸にドキュメントの複雑さ (Complexity of document) を取っています。

“複雑さ” はドキュメントの構成要素に対応し、本文、見出し、表紙の他に、図表、数式、文献、索引、またそれらの相互参照などがあります。

How to Turn your Text into a Powerful LaTeX template.

Comparison of Word and LaTeX depending on the complexity of the task: for natural sciences, anything more complex than articles takes more effort in Word; for social sciences, anything more complex than papers takes more effort in Word; for novels, book series takes more effort in Word than in LaTeX.

“Word” のグラフは理系文書 (natural science) と文系文書 (social science) の 2 つがありますが、いずれもある複雑さを超えると LaTeX よりも作成コストが高くなっています。

すなわち、ドキュメントが複雑になればどこかで必要な作成コストが逆転する ことを示唆しています。

このことを踏まえると、執筆者はどの程度の複雑さを持ったドキュメントを作成するかを考えた上で、適切なツールを選択すべきだと考えられます。


ドキュメントの複雑さやそれに対する適切なツールに関して、定量的な評価方法はありません。個人の経験に裏打ちされた判断に委ねられます。

ともすれば、非常に簡単な手紙であっても LaTeX で作成する人もいれば、相互参照などがある複雑なドキュメントを MS Word で作成する人もいるでしょう。

また、複雑なドキュメントであっても、適切な補助ツールを用いることでその作成に対する作成コストを減らすことが出来る可能性があります。MS Word ではアドインから、LaTeX ではパッケージやテキストエディタから補助を得ることが出来ます。

もしも複雑なドキュメントであっても「この補助ツールを使えば簡単に実現できるゾ!」と知っている方がいれば、ぜひ記事にまとめてください。あまり知られていないツールを紹介する記事であれば、非常に有用な情報源になる可能性があります。

MS Word では難しいこと

LaTeX だと比較的簡単なのに、MS Word では簡単でなさそうなことがいくつかあります。簡単でなければ、LaTeX を使わざるを得ないということになるでしょう。

私が思いつく MS Word では難しいことは以下の点です。

  • 数式・図表の番号付け、番号の更新
  • 相互参照・文献参照
  • 用語集
  • ソースコードの挿入(行番号やページまたぎを含む)
  • ページをまたぐような文章囲み枠
  • 多言語処理

「これは簡単に出来るゾ!」と思う方は、ぜひ記事にまとめてください。私は作成方法を知りません。

この辺りの方法がクリアになると、LaTeX ユーザを MS Word に引き込める可能性があると思います。

LaTeX だけが選択肢ではない

LaTeX でなくても、テキストファイルによる文書作成が実現可能です。例えば以下のようなツールが挙げられます。(† のあるツールは日本人コミュニティで開発されています)

最終的に LaTeX を経由して PDF を生成するものもありますが、これらは LaTeX よりも記法が簡略であったり他の言語を標準で含めることのできるものがあります。

また、SATySFi や Typst は LaTeX に依存しないツールであり、LaTeX の対抗馬ともなりうるツールです。

しかしながら実際、LaTeX は歴史的にも長く存在しているため多くの資産があり、テンプレートも LaTeX でのみ展開されていることが少なくありません。1 からこれらを作成しなければならない可能性があることは否定できません。

まとめ

自分の使わないツールを貶さず、自分の経験値とドキュメントの複雑さに合った適切なツールを使いましょう。LaTeX は理系のみに門戸が開かれたツールではありません。

卒論などで特定のツールが指定されている場合はしょうがありません。しかしながら、特定のツールが指定されている理由は、その分野にとって適切であることやテンプレート等の資産があることなど、それなりの理由・経緯があるものだろうと推察されます。諦めましょう。(単純に研究室のボスがそのツールしか使えないとかもあるみたいですね)

しばしば、MS Word のコメント機能で添削する方が楽だとする人もいるらしいですが、PDF の注釈あるいは直書きした方が良いのではないかと思います。これであれば LaTeX でも問題なく PDF で添削できます。


今回、メリット・デメリットとして比較した項目以外にも、以下のような項目に関しても注目すると面白いかもしれません。

  • 情報収集のしやすさ
  • 挿入できる画像形式
  • ファイル分割
  • 共同編集
  • OS 毎の出力結果
  • 拡張性

  1. このような修正前の情報をコメントアウトで残す手法は、Git などを使ってバージョン管理をする場合には悪手とされています。これは単に無意味になるリソースが割かれることや第三者が見て目的が不明瞭になるためです。ただ、自分が分かっていればリソースが少々割かれていても問題があるとは思いません。

[改訂第 9 版]LaTeX 美文書作成入門を読んで「?」と思ったところ

この記事は「TeX & LaTeX Advent Caleandar 2023」の 17 日目の記事です。16 日目は wtsnjp さんでした。18日目は doraTeX さんです。


12 月 9 日に [改訂第 9 版]LaTeX 美文書作成入門(以下「美文書」と呼称)が出版されました。

私は少し遅れて翌 12 月 10 日にゲットしました。 これまでのかわいい表紙からシックなかっこいい表紙になり、とてもいい感じですね。特に深い青なのが好きです。キラキラな蝶々もとても良いですね 🦋

個人的に「B5 変形判の書籍って読みづらい!」印象を持っていたのですが、実際に開いて読んでみると美文書と銘打つだけあって非常に読みやすいと感じました。やっぱりすごい。

一方で、内容に関しては「読んでいて誤解を招きそうだな?」とか「もう少し補足があっても良さそうだな?」と思う部分がありました。

本記事は、私がそのような「?」と思った部分を列挙してみようという記事です。そのため、感想文ではなく美文書を補足するような記事になります。 また、具体的な部分を取り上げながら補足するため、ぜひ第 9 版の美文書を片手に読むことをお勧めします。

本記事の目的

この記事は「LaTeX 美文書作成入門」をダメな書籍だと批判する記事ではありません。補足を目的とした記事です。 また、本記事で取り上げる内容は美文書内のごく一部です。そのため、これ以外の部分は非常に有意義であり私も含め助けられる人は多いはずです。

また、LaTeX に関して初心者よりは知識があると思っていますが、私自身も間違いを犯している可能性が十分にあります。そのような際はコメントで指摘してください。

ちょっと危なそうだなと思ったところ

初めて LaTeX を触る人が読むときに困ったり誤解しそうなところがいくつかあるように思いました。

p.86, [参考]

<>= が接近するように組み合わせるコードが書かれていますが、コード内に @ が含まれるため \makeatletter~\makeatother が必要です。

美文書内で \makeatletter\makeatother に関して言及されるのは p.171 が最初であり、頭から読んだ人にとって p.86 時点でこれらの存在を知らないため、謎のエラーに悩まされる可能性があります。

p.92

レガシー LaTeX では数式中の太字(ボールド体)はけっこう面倒です。

これ以降の部分で bm パッケージが紹介されますが、bm パッケージと unicode-math パッケージは競合します。 これに関して特に言及がありませんでした。

unicode-math を利用するときには bm の \bm ではなく、\symbf を使います。bm も読み込みません。

美文書内ではレガシーとモダンを分けて書いているため、そもそもレガシーな bm パッケージとモダンな unicode-math パッケージを併用することは考えないのかもしれません。

しかし、少なくとも初心者ではないレガシーな bm を使ってきた人にとって、モダン LaTeX に移行するステップとして unicode-math を使うときに \bm を介して太字斜体にしたいと考える人もいるだろうと思いました。 プリアンブルが秘伝のタレ状態になっている人にとっても危ないかも知れません。

p.104, [参考]

unicode-math(93 ページ)では \varTheta が ϴ になるようです。unicode-math では数式中のイタリック文字は $\symit{Θ}$ のように書きます。

unicode-math では \varTheta だけが上手く斜体にならないような書き方になっていますが、これは誤解を招く表現です。

そもそも \varTheta\Theta は意味の異なる文字です。unicode-math における \varTheta\Theta の変種 (variant) を表しており、\Theta の斜体ではありません。そのため、amsmath のように接頭辞 var を付けても斜体にはなりません。

一方で、\varGamma 等は変わらず斜体のギリシャ文字に相当する記号が出力されます。しかし、これらは amsmath に由来する記号であり、Unicode な文字ではありません。(unicode-math を利用するならば使わないべきです)

unicode-math において、接頭辞を使ってギリシャ文字を斜体にするには it を用います。(e.g. \itTheta, \itvarTheta, \itGamma) これは \symit{\Theta} 等の簡略表記です。

また、§ 5.22 で math-style = ISO を示しているので、ギリシャ文字大文字が立体か斜体かで悩むこともないようにも思います。

p.154, § 10.2 PDF のしおりと文書情報

(u)pLaTeX を使って hyperref パッケージを読み込む際の注意点として、pxjahyper パッケージを読み込むべきだとしていますが、p.27 やその他のページでは plautopatch パッケージを読み込むようにしています。

当然、plautopatch を読み込むことで pxjahyper も読み込まれるので、改めて読み込む必要があるような記述は不要だと思います。(pxjahyper は hyperref の後に読み込む必要がありますが、plautopatch が良しなに対処してくれる)

もっと掘り下げてほしかったところ

もちろん紙面に限りがあることは承知していますが、私が個人的にもっと掘り下げて書いてあった方が良かったのでは?と思った部分を紹介します。 また、いくつかのトピックに関しては私なりに掘り下げてもみました。

レガシーとモダン

第 9 版では “レガシー” と “モダン” の 2 つの記述があり、LaTeX の過渡期としては必要な記述だったと思う一方で、もっと分かりやすく視覚的に分離してあっても良かったのでは?と思うところもありました。

レガシー情報を知りたい人はモダン情報は不要であるし、モダン情報を知りたい人はレガシー情報は不要になります。しっかりめに読まないと、どちらの情報が書かれているのか分かりづらいように感じました。 これは アドベントカレンダー 10 日目の記事 でも指摘がありました。

また、“レガシー” とは「今では使用を避けるべきツールや方法」を指す言葉であり、現在の LaTeX を使いたい初心者にとって、どうしてこれらのレガシー情報がわざわざ掲載されているのか不思議に思う人もいるかもしれません。(今月発売された改訂版なのに!)

もちろん、レガシーな情報が併記されていないと困るシーンも十分に想定されることを私は知っていますが、このような背景情報が美文書には書かれていないため、初心者にとってはただノイズになってしまうのでは?と思いました。

実際、第 3 章のリード文や § 3.22 で、レガシー LaTeX が (u)pLaTeX を指し、モダン LaTeX が LuaLaTeX と XeLaTeX を指すことやそれぞれの LaTeX の違いを理解することは出来ますが、レガシー LaTeX が存在する意義については記述されていません。

ちなみに、レガシーの情報が必要な理由の 1 つは、モダン LaTeX への移行があまり活発ではなく、レガシー LaTeX がいまだ現役で使われていることが挙げられるでしょう。 また、(u)pLaTeX が “レガシー” と呼ばれる原因は この記事 に一端を見ることが出来ると思います。

p.68, [参考]

\url について、url パッケージの例を提示していますが、hyperref パッケージから提供される \url に関しても触れた方が良いと思います。

hyperref も何かと便利なパッケージであり、利用することは多分にあります。そのため、hyperref パッケージと url パッケージの競合については言及しておくべきです。

hyperref パッケージガイドの \url の説明 では、「hyperref を読み込んでいる場合、url パッケージの \url は hyperref の \url に置き替えられる」と書かれています。(hyperref 内で url を読み込んでいるので、読み込み順序を問いません)

加えて、この[参考]では \section 内で \url を利用する方法が紹介されています。

美文書では \protect を用いた方法を提示していますが、hyperref 由来の \url はこの方法では上手くいきません。

% 2 回目以降のタイプセットでエラーになる例
\documentclass{jlreq}
\usepackage{hyperref}
\begin{document}

\section{%
  \protect\url{https://www.example.com}%
}

\end{document}

もしも、\protect で上手くしたい場合は、hyperref のパッケージガイドにあるように \let\originurl\url のように url パッケージ由来の \url を適当に逃がすと良いです。 当然ですが、コマンド名が変わってしまうことに注意してください。

\documentclass{jlreq}
\usepackage{url} \let\originurl\url
\usepackage{hyperref}
\begin{document}

\section{%
  \protect\originurl{https://www.example.com}%
}

\end{document}

これが \protect を使う最も単純な解決方法です。

一方で、もう 1 つの方法として紹介されている \section[URL]{URL} であれば、hyperref パッケージでも上手く動作します。

この他にも、hyperref から提供される \texorpdfstring を利用する方法もあります。

p.70, 用語

p.70 の「用語」節には、以下のようなコードが紹介されていました。

\newcommand*{\term}[2][]{%
    {\sffamily\bfseries #2}%
    \ifx\relax#1\relax\index{#2}\else\index{#1@#2}\fi
  }

p.65 の[参考]で \NewDocumentCommand が紹介されていますが、これを用いても同じようなコマンドを定義することが出来ます。

\NewDocumentCommand{\term}{ o m }{
    {\sffamily\bfseries #2}
    \IfNoValueTF{#1}
      {\index{#2}}
      {\index{#1@#2}}
  }

別解として、このような方法もあることを例示していても良かったように思います。(個人的に \NewDocumentCommand で定義されている方が分かりやすい)

実際、\newcommand でオプション引数の有無で挙動を変えるようなコマンドを作成するよりも簡単かつ \NewDocumentCommand の方が表現の幅が広いため、知っておいた方が良いと思います。

p.137, § 8.3 tabularray パッケージ

tabularray パッケージでは old インターフェースと new インターフェースがあります。(パッケージガイド § 2.1 参照)

美文書では、old インターフェース (\SetCell) によるセル結合やセルの色付けが紹介されています。

今後 tabularray パッケージから old インターフェースが無くなるとは思いませんが、(個人的に)魅力的な new インターフェースによる「表コンテンツと表スタイルを分離できること」が伝わらないなと思いました。 (もちろん、分離しない方が良いとする考え方もあるかもしれません)

もしも new インターフェースによる表作成に興味がある場合は、「tabularray で表作成をもっと簡単に」を参照してみてください。

p.152

相互参照の解消には aux ファイルが必要だという主張が示唆的に示されていますが、繰り返して実行する際に aux ファイルを消さないように注意する指摘があっても良いと思いました。

統合環境の構成によっては、実行した直後に aux ファイルをタイプセット毎に削除するようにも出来てしまいます。

実際、別文脈ですが TeX & LaTeX アドベントカレンダー 1 日目の記事には “中間ファイルを消さないようにする方法” が紹介されています。

p.277, § 15 スタイルファイルの作り方

l3build についても解説入れてほしい!

と言うか、美文書とは別に expl3 に関する書籍があっても良いなと思いました。少なくとも僕は買います。(ニッチ過ぎ?)

現状、expl3 に関する情報は source3.pdf やブログ記事のみです。

さいごに

私が美文書を初めて手にしたのはおそらく第 5 版でした。これは研究室配架になっていたもので、当時でもちょっと古い版のものでした。

それでも LaTeX を初めて触った私にとって非常に助けられました。当時のネット情報のありようも影響したかもしれませんが、この美文書なしに LaTeX を扱うことはほぼ不可能でした。

ネット情報も多数あるものの、インストール方法から基本的な作成方法まで包括的に紹介されている書籍はこれに限られると思います。初めて LaTeX を始める人には、この本をオススメします。

現在では第 9 版(どうやら 11 版相当になるらしい)にもなり、これまでもこれからも長く愛される書籍であると良いなぁと思います。


どうやら美文書は近年 3 年周期で改訂されているので、次に改訂第 10 版(2026 年冬?)が出版されるとしたらどのような内容になっているのでしょうか。

もしかしたら LaTeX3 の潮流も今より激しいものになっているかも知れません。そうなっていると、美文書の内容ももっと LaTeX3 な内容が拡充されるかもしれませんね。

呼吸で痩せられる ?

○ 人間は常に呼吸している

人間は呼吸をして生きている.呼吸とは何だろうか.Wikipedia で参照でもしておこう.

呼吸 - Wikipedia

生物における呼吸(こきゅう)は、以下の2種類に分けられる。

  1. 細胞呼吸(または内呼吸):血液と細胞とのガス交換。細胞が最終二酸化炭素 (CO2) を放出する異化代謝系。

  2. 外呼吸:空気と血液とのガス交換。多細胞生物体が外界から酸素を取り入れ、体内で消費して二酸化炭素 (CO2) を放出すること

2種類あるとされているが,今回は,2番目の外呼吸について考えていきたい.

人間は肺で血液中の二酸化炭素と酸素を取り換えることで,身体に酸素を取り込んでいる.すなわち,呼吸によって酸素が二酸化炭素に置き換わっているのである.

ここで,酸素と二酸化炭素がどのようなものなのか考えてみよう.

酸素 二酸化炭素
化学式 {\mathrm{O}_2} {\mathrm{CO}_2}
分子量 32 44

ムム,分子量が違うぞ

分子量は分子の重さのようなものである.単位は{[\mathrm{g/mol}]}

分子量的に考えれば,一呼吸するたびに炭素の{12[\mathrm{g/mol}]}分だけ減っていることになる.

もしかして,呼吸するたびに体重減っているのでは??? どれくらい減っているのか計算してみよう.

○ どうやって計算するか

二酸化炭素の増加した量を調べれば良さそうだ.炭素の原子量を{n_C}としておこう.

吸気と呼気に含まれる二酸化炭素がどれくらいの量なのか調べよう.

としておこう.

さすがに一呼吸程度ではとても少量の減少しか追えないだろうから,1日でどれくらい体重が減少するのか考えていこう.

  • 1回で呼吸する空気の体積を{V[\mathrm{L}]}

  • 1日での呼吸する回数を{N[\mathrm{times}]}

としておけばいいだろう.

これより,1日で呼吸によって減る体重{M[\mathrm{g}]}は,

{
M
    =n_C V N (n_{\mathrm{out}}-n_{\mathrm{in}})
}

で求められる.なんかかっこいいでしょ.

○ それぞれの量がどれくらいか調べてみる

以下の表にまとめた.

単位 参考サイト
炭素の原子量 12 {\mathrm{ g/mol }} 二酸化炭素 - Wikipedia
大気の二酸化炭素濃度 約400 {\mathrm{ ppm }} 気象庁 | 二酸化炭素濃度の経年変化
呼気の二酸化炭素濃度 3.84 {\%} 呼吸でどのくらいの酸素が二酸化炭素に変わるのか?(江頭教授): 東京工科大学 工学部 応用化学科 ブログ
1回の呼吸する空気の体積 0.5 {\mathrm{ L }} 人間は1日にどれくらいの空気をすうの? | 空気の学校 | ダイキン工業株式会社
1日での呼吸回数 28,800 {\mathrm{ times }} 同上

何を参照するかにもよるのだろうが,表で示した値を用いて計算していこうと思う.

濃度のところが面倒な単位になっているので,少し書き変えておこう.

ppm%の換算

{\mathrm{ ppm }}という単位はあまり聞きなれないように思う.「地球温暖化が...」というような文脈でしか見たことがない.調べてみた.

Wikipedia によれば,100万分の1のことを表すようだ.なんだ,百分率のもっと細かい版じゃないか.

すなわち,{1\mathrm{ ppm }=10^{-4}\%}ということになる.

また,気体に関して{\mathrm{ ppm }}とする際には,体積の比率を表すことになっているようだ.今回の計算ではちょっと扱いづらい単位だ.

単位換算に当たって,本来はこれらの濃度が測定されたときの圧力や温度が知りたいところではあるが,日常生活ライクの状態としてSATPを用いたいと思う.(本当はきちんとしておきたいのだが,それほど影響を受けないだろうということと,最悪はオーダーだけでも合ってればいいだろうと考えている.)

標準状態 - Wikipedia

SATP 基準の温度を25セルシウス度(298.15ケルビン)、標準圧力を 100 kPa とするものがSATP(標準環境温度と圧力、英: standard ambient temperature and pressure)と定義される。

この状態での理想気体の体積は{24.8[\mathrm{L/mol}]}なので,割っちゃえば良いだろう.

{\displaystyle
n_{\mathrm{in}}
    =\frac{400\times 10^{-6}}{24.8}
    \simeq 16\times 10^{-6}\mathrm{mol/L}
}

{\displaystyle
n_{\mathrm{out}}
    =\frac{3.84\times 10^{-2}}{24.8}
    \simeq 15\times 10^{-4}\mathrm{mol/L}
}

これで計算が出来るね.

○ 計算すると意外に...

さて,計算方法もそれぞれの値も手に入れたので,計算するのみだ.

先ほどの濃度を見ると,どうやら吸気と呼気の濃度に{100}倍程度の差がある.吸気の二酸化炭素濃度はそれほど気にしなくても良さそうだ.もう{n_{\mathrm{in}}}は無視してしまおう.

これを踏まえて計算すると,

{
M
    =n_C V N n_{\mathrm{out}}
    =12 \times 0.5 \times 28,800 \times 15 \times 10^{-4}
    =259.2
    \simeq 260 \mathrm{g}
}

{260\mathrm{g}} ??!!

意外とある気がする.間違ってないよな...... ? (間違いがあれば指摘ください)

4日呼吸しているだけで{1\mathrm{kg}}以上も消費することになる.

呼吸ダイエットとかワンチャンある?

ボールが跳ねると重力加速度が分かる

○ ボールが跳ねるときの音

家でスーパーボールなんかを高いところから落としたことはないだろうか.

落としてみると,ボールは跳ね上がって非常におもしろいものだが,地面に当たるのはだんだん早くなっていく感じがする.どれくらいのペースで早くなっていくのだろう.なんとなく指数関数的に減衰していくような気がするが......

ちゃんと計算してみよう.

目次

○ 簡単な問を立ててみる

一様重力{g}の下で,高さ{H}から質量{m}の物体を自由落下させる.この物体と地面は非弾性衝突するものとする.このときの反発係数を{e} ({0 \lt e \lt 1})とする.また,空気抵抗は無視する.

ここで,この物体が{n}回目の衝突で「地面から打ちあがるときの速さ{|v_n|}」,「地面との衝突後の最大の高さ{h_n}」と「地面に衝突してから次に衝突するまでの時間間隔{T_n}」はどのような発展をするか考える.

これくらいの問であれば高校物理の基礎レベルなので,履修者であればだれでも解けることだろう.

鉛直上向きに{y}軸を採り,地面を{y=0}として運動方程式を立てる.

{\displaystyle
m\frac{\mathrm{d}^2y}{\mathrm{d}t^2}
    =-mg
}

この運動方程式は,いずれの時刻であっても同様の運動方程式を満たすことに注意する.

■ 初めて地面に衝突するときは?

初期条件{v=0}{y=H}を課して運動方程式を解くと,

{\displaystyle
v(t)
    =-gt
}

{\displaystyle
y(t)
    =-\frac{1}{2}gt^2+H
}

となる.

落下までにかかる時間{T_0}は,

{\displaystyle
T_0
    =\sqrt{\frac{2H}{g}}
}

衝突直前の速度{v_0}は,

{\displaystyle
v_0
    =-\sqrt{2gH}
}

反発係数の定義 *1 から,衝突後の打ちあがる速さ{|v_1|}は,

{\displaystyle
\left| v_1 \right|
    =e\left| v_0 \right|
}

■ 2回目に地面に衝突するときは?

初めて地面に当たった物体は,運動する方向を鉛直上向きに変えて運動する.このとき満たされる運動方程式は,初めに示した運動方程式と同じだ.これを解くには,以下のように考えれば良い.

地面から鉛直上向きに打ちあがった物体は,1回目の衝突時{T_0=0}とする境界条件を課せば,初速度{| v_1 |}の鉛直投げ上げ問題に帰着する.

{\displaystyle
v(t)
    =-gt+e| v_1 |
}

{\displaystyle
y(t)
    =-\frac{1}{2}gt^2+e| v_1 | t
}

1回目から2回目の衝突までの時間{T_1}は,

{\displaystyle
T_1
    =2e\sqrt{\frac{2H}{g}}=2eT_0
}

また,1回目に跳ね返った後の最大の高さ{h_1}は,

{\displaystyle
h_1
    =e^2 h_0
}

また,2回目に打ちあがるときの速さ{| v_2 |}は,

{
| v_2 |
    =e| v_1 |
}

そろそろパターンが見えてきたのではないだろうか.漸化式を立てて,数列を解くことにしていきたい.

■ パターンを考える

2回目の衝突後に地面から打ちあがるときの速さ{v_2},打ちあがった後の最大の高さ{h_2},2回目の衝突と3回目の衝突の時間間隔{T_2}から,3回目の衝突の後にどのようになるかは検討が付くだろう.分からなければ,逐次計算していけば良い.

{
| v_3 |
    =e | v_2 |,
\qquad
h_3
    =e^2 h_2,
\qquad
T_3
    =e T_2.
}

ちょっとだけまとめておこう.

衝突打ちあがるときの速さ
{ |v_n| }
速さ{ |v_n| }で打ちあがった後の最大の高さ
{ h_n }
打ちあがってから次に地面に衝突するまでの時間間隔
{ T_n }
1回目 { |v_1|=e|v_0| } { h_1=e^2 h_0 } { T_1=2e T_0 }
2回目 { |v_2|=e|v_1| } { h_2=e^2 h_1 } { T_2=e T_1 }
3回目 { |v_3|=e|v_2| } { h_3=e^2 h_2 } { T_3=e T_2 }

これより,{n}回目({ n:n>0 }の整数)の衝突打ちあがるときの速さ{| v_n |},打ちあがった後の最大の高さ{h_n}{n+1}回目の衝突までの時間{T_{n}}は,

{\displaystyle
| v_n |
    =e| v_{n-1} |,
\qquad
h_n
    =e^2 h_{n-1},
\qquad
T_{n}
    =eT_{n-1}.
}

これを,{e}{T_1}{| v_1 |}{h_0}を用いて表すと,

{\displaystyle
| v_n |
    =| v_0 |e^{n},
\qquad
h_n
    =h_0 e^{2n},
\qquad
T_n
    =2T_0 e^{n}.
}

ただし,

{ \displaystyle
|v_0|=\sqrt{2gH},
\qquad
h_0=H,
\qquad
T_0=\sqrt{\frac{2H}{g}}
}

これより,反発係数{e}{0\lt e\lt 1}であり,いずれの値も指数関数的に減衰することが分かった.

○ 重力加速度を出してみよう

この減衰する衝突間隔を足し上げて重力加速度を出せないだろうか.

そこで,{T_n}について,自由落下を始めてから衝突が十分になくなる時間{T}を以下のように定義する.{N\gg 1}として,

{\displaystyle
T
    =\sum^N_{n=0} T_n
    =T_0+\sum^N_{n=1} T_n
}

ここで,第2項の数列{T_n}は収束するので無限等比級数和を考えることが出来る.これを計算すると以下のようになる.

{\displaystyle
T
    =\frac{1+e}{1-e}T_0
}

{T_0}を重力加速度{g}で表し直し,重力加速度{g}について解けば,

{\displaystyle
g
    =\frac{2H}{T^2}\left( \frac{1+e}{1-e}\right) ^2
}

■ 重力加速度を計測できる?

実際にボールを自由落下させて実験することで重力加速度を求めることは可能なのだろうか.上の計算結果から,重力加速度を計測するのに必要な物理量は{H,T,e}の3つである.

{H}はボールを自由落下させるときの初めの高さなので測定可能である.また{T}についても,ストップウォッチ等で測定可能である.どこでボールが跳ねなくなったのか決めるのかは任意性があるけれども,そこは上手く決めてほしい.

反発係数は,1回目の衝突前後の関係から,

{\displaystyle
e
    =\left| \frac{v_1}{v_0} \right|
    =\frac{\sqrt{2gh_1}}{\sqrt{2gH}}
    =\sqrt{\frac{h_1}{H}}
}

となるので,反発係数についても計測することが出来る.

したがって,3つの物理量{H,T,e}はそれぞれ測定可能な量なので,ここから重力加速度を計測することが出来る.

○ 備考

上では,運動方程式からわざわざ境界条件や初期条件を課して{v(t)}{y(t)}の式を導出することでそれぞれの値を出していたが,正直面倒くさい.

鉛直投げ上げの問題であれば,投げ上げの瞬間から最高点に到達するまでと最高点から地面に衝突するまでは対称になるので,{y(t)}の式を平方完成しておけば良い.

{\displaystyle
y_n(t)
=-\frac{g}{2}\left( t-\frac{v_n}{g} \right)^2+\frac{{v_n}^2}{2g}
}

これによって,最高点までの時間の2倍が打ちあがりから着地までの時間に対応するので,

{\displaystyle
T_n
=2\frac{v_n}{g}
}

であり,最高点は,

{\displaystyle
h_n
=\frac{{v_n}^2}{2g}
}

である.

また,打ちあがるときの速さは反発係数の定義から

{
v_n=ev_{n-1}
}

であることはすでに分かっているので,この漸化式を解けば{T_n}{h_n}もすぐに求めることが出来る.

もしかしてこんなに長々と記事を書く必要もなかったのか???

まぁ,計算技術的な話だから上の2つのやり方を示すのは教育的な価値があるのかな.

*1:反発係数{e}の定義

{\displaystyle
e
    =\left|\frac{v_{\mathrm{衝突後}}}{v_{\mathrm{衝突前}}}\right|
}