2016年6月6日月曜日

tcolorboxを使った定理環境

定理環境をmdframedからtcolorboxへ乗り換えでは,ソースを変更せずに済むように、タイトルが省略可能である定理環境をtcolorboxを使って作りました。しかしあちらの記述では臨時的にtcolorboxのオプションを追加したい場合などに対応できないので、今回はtcolorboxのxparseライブラリを使って,臨時のオプションも省略可能な引数として記述できるように定理環境を書き改めました。

今回の拡張で、例えばtcolorboxのsidebysideオプションを使い、次のように文章の横に図を配置することなどが可能になりました。タイトルは[]で囲み、追加のオプションは、ダブルクォート""で囲むように設定しています。
ソースは以下のとおりです。

\documentclass[dvipdfmx]{jsarticle}

\usepackage{lipsum}%ダミーの文章を入れる
\usepackage{capt-of}

\usepackage{tcolorbox}
\usepackage{varwidth} 
\usepackage{amsmath}
\tcbuselibrary{breakable}
\tcbuselibrary{skins}
\tcbuselibrary{xparse}%内部でxparse.styを読み込むのでNewDocumentCommandなどが使える
\definecolor{frameinnercolor}{RGB}{49,44,44}


\newcounter{theorem}
\numberwithin{theorem}{section}% numberwithinはamsmathで定義
\NewTColorBox{theobox}{o m +o}{%oは省略可能な引数、mは必須の引数、+は複数行に亘っても良いことを表す。
%#1=タイトル(省略可), #2=定理環境名, #3=tcolorboxの追加オプション
enhanced,frame empty,interior empty,
coltitle=white,fonttitle=\bfseries,colbacktitle=frameinnercolor,
extras broken={frame empty,interior empty},
borderline={0.5mm}{0mm}{frameinnercolor},
sharp corners=downhill,
breakable=true,
top=4mm,
before skip=3.5mm,
attach boxed title to top left={yshift=-3mm,xshift=5mm},
boxed title style={boxrule=0pt,sharp corners=all},varwidth boxed title,
IfNoValueTF={#1}{title=#2~\thetheorem.}{title=#2~\thetheorem:~#1},
IfNoValueTF={#3}{}{#3}%3つめの引数を省略すると-NoValue-を返すのでその対策
}

\NewDocumentEnvironment{theorem}{o m +o}{%NewDocumentEnvironmentはxparse.styで定義
\refstepcounter{theorem}\begin{theobox}[#1]{#2}[#3]}{\end{theobox}}

\NewDocumentEnvironment{theo}{o +d""}{%dは""で区切られた部分を省略可能な引数として扱うことを表す。
\begin{theorem}[#1]{定理}[#2]
}{\end{theorem}}

\NewDocumentEnvironment{law}{o +d""}{%
\begin{theorem}[#1]{法則}[#2]
}{\end{theorem}}


\begin{document}

\section{セクション名}

\begin{theo}[Title]
 \lipsum[1]
\end{theo}

\begin{law}[クーロンの法則]"sidebyside,%横に並べる
sidebyside align=top seam,
sidebyside gap=5mm,
righthand width=4.4cm,
lower separated=false,%lower partとの区切りを入れない
halign lower=flush right,
"%
シャルル・ド・クーロンは1785年,
帯電した小さな球の間に働く力をねじり秤で測定して,
荷電粒子間に働く力がそれぞれの電荷の積に比例し,
距離の2乗に反比例する(逆2乗則に従う)ことを発表した(下式).
\begin{equation*}
 F=k\frac{q_1 q_2}{r^2} \quad 
\left(
\begin{array}{ll}
  q_1, q_2\text{は荷電粒子の電荷量}\\[3pt]
 r\text{は粒子間の距離}
\end{array}
\right)
\end{equation*}

この法則は現在,
$r$のべきを2の代わりに$2+\delta$とすること($r^{2+\delta}$)で逆2乗則からのずれを
表すことにしたとき,$\delta <10^{-15}$の精度で正しいことが知られている.
また$r$の値としては,少なくとも原子核の大きさのレベル($10^{-16}\,\mathrm{m}$)から
地球--木星間の距離($10^8\,\mathrm{m}$)まで正しいことが確かめられている.

\tcblower
 \includegraphics[scale=0.12]{torsionbalance.pdf}
\captionof{figure}{クーロンのねじり秤}
\end{law}

\end{document}