スキップしてメイン コンテンツに移動

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 captionof="" code="" document="" end="" figure="" includegraphics="" law="" m="" mathrm="" r="" scale="0.12]{torsionbalance.pdf}" tcblower="">

このブログの人気の投稿

OpenCv-PythonとpdfLaTeXで自炊pdfファイルの位置調整

この記事は TeX & LaTeX Advent Calendar 2021 の11日目の記事です. 10日目は t_kemmochi さん,12日目は yukishita さんです.   動機  書籍の自炊にブックエッジスキャナーの AvisionのFB2280E を利用しています。書籍を裁断せずに1ページずつスキャンを行うため、本の開き具合などの要因で本の序盤、中盤、終盤で得られるスキャン画像の位置ずれが大きくなります。以前からpdfLaTeXを利用して位置調整をしていたのですが、OpenCvを利用して自動化できそうだったので試してみました。 やること 本記事では、pdf化した文書画像の版面(文字の印刷された部分の意味で使います)を半自動的に計算してpdfの画像の位置調整をするために、OpenCvとpdfLaTeXを利用する方法を解説します。手順としては Pythonの画像認識用ライブラリであるOpenCvを利用して版面を計算する。 テンプレートエンジンライブラリのJinja2を使って画像のバウンディングボックスなどを記述したLaTeXファイルを作成する。 pdfLaTeXでpdfを読み込み、位置の調整されたpdfを作成する。 という流れになっています。作業環境としては、 Visual Studio CodeをRemove - WSL拡張機能と併用 しています。PythonやそのライブラリはWSL上のUbuntuにインストールし、他にもpdfファイルを他のファイル形式にするためにpoppler-utilsなんかもインストールしました。 参考記事 OpenCvを利用した文書画像のレイアウト解析については ブログSomething Like Programming内の記事 Document Layout Analysis githubリポジトリ rbaguila/document-layout-analysis OpenCv-Pythonチュートリアル を参考にしました。 pdfLaTeXがpdf加工に使えるという話と、pdfpagesパッケージの存在は doraTeXさんのブログTeX Alchemist Onlineの記事 pdfTeX による見開きPDFの結合・分割 で知ったように思います。 画像pdfをpdfpagesで取り込む ま...

定理環境をmdframedからtcolorboxへ乗り換え

追記:2016/05/02 以前に掲載していた定理環境のマクロでは、カウンターが変化しないような記述をしてしまっていたので、全面的に書き換えました。 追記:2016/06/06 tcolorboxのオプションを追加できるように書き直しをしました( tcolorboxを使った定理環境 )。 LaTeXの話です。 これまで定理環境の修飾にmdframed.styを利用してきました。 mdframedを用いた定理環境の修飾(platex+dvipdfmx, tikz) しかし上の投稿で用いた記述をしていると、定理環境がページの下部にきたとき、まれに以下のように環境が新しいページに送られてしまい変なところで改ページが起こります。 TeX-LaTeX Stack Exchangeでも同様の不具合が報告されていて、mdframed.styの作者が回答して解決しているようなのですが、私の場合は上手く行きませんでした。タイトル部分の位置の計算に問題があるようです。 そういう訳で、mdframed.styよりも高い表現力を持つtcolorbox.styには興味を持っていました。今回は、mdframed.styで記述していた部分を、ソースの変更無しにtcolorboxで置き換えてみたので、その紹介をします。 tcolorbox.styで置き換えた結果は次のようになりました。 見た目はほとんど変わっていません。中のboxは別のtcolorbox環境です。 この定理環境のソースコードは次のようになります。 \usepackage{tcolorbox} \usepackage{varwidth} \tcbuselibrary{breakable} \tcbuselibrary{skins} \definecolor{frameinnercolor}{RGB}{49,44,44} \newcounter{theorem} \numberwithin{theorem}{section}% numberwithinはamsmath.styで定義されている \newenvironment{theorem}[2][]{% %#1 = タイトル, #2 = 定理環境名 \refstepcounter{theorem}% \newtcolorbox{...

定理を再掲したときに定理番号も揃える(amsmathのtagと似た挙動の定理環境を作る).

LaTeXの話題です.amsmath.styで定義されているtagコマンドは,数式環境の式番号部分を自由な文字列で置き換えることができるようになっています.下に例を挙げます. この画像を生成するLaTeXのコードは次のようになります. \documentclass[a4paper,dvipdfmx,uplatex]{jsarticle} \usepackage[dvipdfmx,bookmarks=true,bookmarksnumbered=true,% ,colorlinks=true,linkcolor=blue]{hyperref}% \usepackage{showkeys} \usepackage{amsmath} \numberwithin{equation}{section} Unknown environment 'document' 最初のequation環境にeq:eulerというlabelをつけ,第2のequation環境ではtagコマンドを使って数式番号部分に¥ref{eq:euler}と書くことで,実際に表示される式番号が第1のequation環境のものと同じになっています.この第2のequation環境にはeq:euler2というlabelを付けており,これを¥eqref{eq:euler2}と参照すると表示される番号は第1のequation環境のものであるにも関わらず,リンクをクリックすると第2のequation環境にジャンプします. このような現象が起こるのは,上記のファイルをタイプセット...