この記事は「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 な内容が拡充されるかもしれませんね。