見出し画像

LaTeXtcolorboxパッケージでのナンバリングについて

LaTeXいじっててtcolorboxパッケージにナンバリングをしたいけどやり方わからんと苦しんでた人がいたので解決したときの方法をメモるところです。

目次は以下。


前提

前提として友人は以下のリンクのページを見てtcolorboxパッケージの設定をしていたので見ていただきたい。

このページの一番最後にこんな一文が。

また,この記事では定理のナンバリング様式(counter)については一切触れませんでした.全体を通して「定理1,定理2,定理3,……」とするやり方もあれば,1節は「定理1.n」,2節は「定理2.n」,……とするやり方もあります.tcolorbox の使用にあたっては本質的ではないと判断し省きましたが,余裕があれば加筆したいと思います.ここでは一番最後の\newtcbtheoremを用いた例では,\newtcbcounter[number within = section]{その他のoptions}とすれば後者のカウント方式に切り替わる,ということだけ説明しておきます.

つまりプリアンブルで新たに定理の環境を設定した時にcounterを含ませることで順番にナンバリングを付与することができるという内容。
LaTeXのプリアンブルは人によってかなり違うので詳細は省くが、tcolorboxのプリアンブル部分として今回設定していたのは以下。(友人が使っていたものをそのまま引用。未許可だけど多分許してくれる。なお組んだのは私では無いので設定内容はよくわからないです。)

\newtcbtheorem{definition}{定義}{enhanced, 
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}

ちなみにこれを使って\begin{document}内で、

\section{はじめに}
\begin{definition}{お尻探偵}{ketsu}
お尻探偵とは,ケツだけ星人亜種である.
\end{definition}

を書くとこのようにコンパイルされる。

スクリーンショット 2021-09-17 162544

まぁここまでは想定通りである。(内容は深夜にやったため支離滅裂ですが(支離と尻をかけた激ウマギャグ)気にしないでください。)
ちなみに環境の構造を指摘しておくと、

\begin{definition}{定義のタイトル}{ラベル名}

となっており、\begin{definition}以降の2つの中括弧を飛ばしてしまうと以降の本文の頭2文字がタイトルとラベルに吸収されて消滅するので注意。

この直後に新たに定義を追加すると、

スクリーンショット 2021-09-17 163225

このように番号が連番になる。

しかし、sectionをまたぐとこの番号はリセットされず更に連続する。

スクリーンショット 2021-09-17 163436


今回の目的

今回友人がやりたかったのは、数学書でありがちな(例:雪江代数)らしい(私は物理の畑なので見たこと無いけど)、「sectionごとに番号を『§1定義1.1,、定義1.2.......、§2定義2.1、定義2.2......』としたい、かつ定義、命題、補題などの枠で囲む項目の通し番号をすべて連番にしたい」ということらしい。

つまり以下のような状態である。

スクリーンショット 2021-09-17 164416

一目瞭然だろうが、定義や例、確認など様々な枠で囲われているが、セクション内では番号が連番になっている。これらはすべてプリアンブルで最初に示した定義の環境のように設定を1つずつしている。さらにセクションをまたぐとナンバリングにリセットがかかっているのが見て取れるだろう。

今回はこれが目標。

注意:2021/09/23

この記事に書いてあることを試す前にまず冒頭にある実数さんの記事の内容を一通りしっかり読んでもらいたい。
今回取り上げているtcolorboxのパッケージを取り扱うために必要なプリアンブルの記述などが書いてるので。

解決法

まず番号をセクションごとに分ける方法である。

最初に示したプリアンブルの環境設定をもう一度貼っておく。

\newtcbtheorem{definition}{定義}{enhanced, 
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}

この環境設定を以下のように変更するとセクション番号が反映されるようになる。

\newtcbtheorem[number within = section]{definition}{定義}{enhanced, 
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}

どこが変わったかというと\newtcbtheoremと{definition}の間に[number within = section]を入れた、という変更。

もちろん他にも例や確認の環境設定もあるが、とりあえず定義の環境設定にのみ変更を加えると、こう。

スクリーンショット 2021-09-17 165512

はい、これでセクション番号が反映されました。

「じゃあこれを全部の環境設定に反映させればええやん!」ということでやるとこう。

スクリーンショット 2021-09-17 165701

お察しでしたが番号が環境ごとに別々のカウントに。

もちろんこの形式も需要はあるけど(てか多分物理の本は殆どこうなってる、知らんけど)今回やりたいこととは違う。

というわけで以下のように修正します。

\newtcbtheorem[number within = section]{definition}{定義}{enhanced, 
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}

\newtcbtheorem[use counter from=definition]{exam}{例}{enhanced,
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}

(下の「例」の環境はこれまで出してませんでしたがもともとあったやつです。こうすればいろんな枠を定義できます。)

さっきは例の環境のところも\newtcbtheorem[number within = section]{exam}...としてたけど今回は[number within = section]の代わりに

[use counter from=definition]

としたわけです。つまり「definition環境と同じカウンター使うぜ!」と宣言してるんですねぇ。この上で例の環境のみこのように修正して他をほったらかすとこう。

スクリーンショット 2021-09-17 170431

というわけで定義と例のナンバリングが連番になってくれました。ほかは修正してないので確認環境は独立したナンバリングになってるのでヨシ!

というわけで例とか確認もまとめて修正しておくとこう。

\newtcbtheorem[number within = section]{definition}{定義}{enhanced, 
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}
\newtcbtheorem[use counter from=definition]{exam}{例}{enhanced, 
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}
\newtcbtheorem[number within = section]{remark}{確認}{enhanced, 
   attach boxed title to top left={xshift=5mm,yshift=-3mm}, 
   boxed title style={colframe = green!35!black, colback = white},
   coltitle = black,
   colback = white,
   colframe = green!35!black,
   fonttitle = \bfseries,
   breakable = true,
   top = 4mm
}{fuga}

でコンパイルするとこう。

スクリーンショット 2021-09-17 170910

はい、目標達成。

追記

今回はセクションごとにナンバリングをリセットしたかったけどもちろん他の単位でも可能。例えばChapterを作っておくとこのような表示になる。

スクリーンショット 2021-09-17 171549
スクリーンショット 2021-09-17 171602

番号多いなぁ~~~~と思ったそこのあなた、この場合はchapterを作ってかつその下にsectionを作っておりそのためなんか多くなってるのである。

なので

[number within = section]

から

[number within = chapter]

に変えるとこう。

スクリーンショット 2021-09-17 171809
スクリーンショット 2021-09-17 171822

比較的すっきりしましたね。


内容としては以上。何かあれば連絡ください。

良いLaTeXライフを。

参考

大元の記事様。

tcbのマニュアル。

今回かなりお世話になったところ。本当にありがとうございます。

この記事が気に入ったらサポートをしてみませんか?