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

定理環境の修飾 mdframed.sty

追記:2016/04/19 定理環境をmdframedからtcolorboxを使ったものに変更しました。

LaTeXの話です.定理環境の見栄えを変更するために,mdframed.styを用いています.mdframed.styの機能はpdfTeXなどでタイプセットすることを前提にしているようで,platexではマニュアルにある機能を十分に活かすことが出来ません.

2014/05/01追記:tikzパッケージを読み込む前に,graphicxパッケージをdvipdfmxのオプションを付けて読み込むことで,platex+dvipdfmxでも以下のような例は再現出来ました。こちらを参照。

LuaTeXはpdfTeXの後継であり,この日本語対応LuaTeX-jaが開発されています.これを使えばmdframed.styの機能を十分に使えるのではないかと思い試してみました.LuaTeX-jaはTeXLive2013には標準で含まれており,lualatexコマンドを使ってタイプセットします.

mdframed.styのマニュアルにあるものを借用して,次のようなファイルををタイプセットしてみました.

\documentclass[a4paper]{ltjsarticle}
\usepackage{luatexja}
\usepackage{amsmath,amssymb,mathrsfs}
\usepackage{etoolbox}
\usepackage{tikz}
\usepackage{mdframed}

\usepackage{luatexja-fontspec}

\defaultjfontfeatures{Scale=0.92487}
  % この行がない場合,luatexja-fontspec は
  % 和文フォントの大きさを欧文フォントの 0.962212 倍
  % ([lt]jclasses でのデフォルト設定と同じ)で定義する.
  % 上の指定は,[lt]jsclasses における欧文 10pt: 和文 13Q
  % という比率に合わせるためのもの.

\setmainfont[Ligatures=TeX]{TeXGyreTermes}
\setsansfont[Ligatures=TeX]{TeXGyreHeros}

\setmainjfont[BoldFont=IPAexGothic]{IPAexMincho}
\setsansjfont{IPAexGothic}

\newjfontfamily\jisninety[CJKShape=JIS1990]{IPAexMincho}


\begin{document}
\newcounter{theo}[section]
\newenvironment{theo}[1][]{%
\stepcounter{theo}%
\ifstrempty{#1}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut Theorem~\thetheo};}}}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut Theorem~\thetheo:~#1};}}%
}%
\mdfsetup{innertopmargin=10pt,linecolor=blue!20,%
linewidth=2pt,topline=true,
frametitleaboveskip=\dimexpr-\ht\strutbox\relax,}
\begin{mdframed}[]\relax%
}{\end{mdframed}} 

\begin{theo}[Riemann積分の線型性]
$\mathscr{R}(I)$を$\mathbb{R}^n$の有界閉区間$I$上でRiemann可積分な実数値関数全体
 の集合とする.$\mathscr{R}(I)$は実ベクトル空間であり,$I$上の積分は
$\mathscr{R}(I)$から$\mathbb{R}$への線型写像である.即ち
\begin{equation}
 f, g\in \mathscr{R}(I),\ c\in \mathbb{R}\text{ならば}
f+g\in \mathscr{R}(I),\ cf\in \mathscr{R}(I)
\end{equation}
であり,なおかつ
  \begin{gather}
  \int_I (f+g)(x)\, dx
 =\int_I f(x)\, dx + \int_I g(x)\, dx, \\
  \int_I cf(x)\, dx 
 = c\int_I f(x)\, dx
 \end{gather}
が成り立つ.
\end{theo}
\end{document}


いい感じです.Tikzを使いこなせるようになると色々出来そうです.また,日本語の設定はLuaTeX-jaの使い方をそのまま貼付けました.そちらにあるスタイルファイルの誤記は修正してみたものの,フォントの設定を何も書かないでタイプセットすると,フォントの埋め込みをしていないファイルは日本語が全てゴシック体で表示されてしまいました.

また,LuaTeX-jaの実行速度は現時点ではかなり遅いです.数ページ程度のファイルならばあまり気になりませんが,数百ページのファイルになるとplatex+dvipdfmxの方が大分速いです.また全角幅や全角高さを表すzw, zhが使えなくなり,\zw, \zhに変更しなければならないので,platexと併用するために,ZRさんの「LuaTeX-jaでzwを使う件について」を参考にBxjatoolバンドルを導入しました(Bxtoolboxにも依存するのでこちらも導入しました).これでタイプセットコマンドとtexファイルのプリアンブルを少し変更することで使い分けが出来るようになりました.

マクロは使いこなせないので,個人的にはまだまだplatexを使う機会のほうが多そうです.

このブログの人気の投稿

定理環境を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{...

LaTeXで宛名ラベルシールの差し込み印刷をする

この記事は TeX & LaTeX Advent Calendar 2021 の20日目の記事です。 19日目は hid_alma1026 さん、21日目は 7danmoroboshi さんです。   はじめに 業務でラベルシール用宛名ラベルの作成に ラベル屋さん というソフトを利用しています。しかし公式サイトの使い方を見る限り、連名の有り無しなどの条件分岐に対応したラベル作りに対応できなさそうです。そこでLaTeXのtikzとtcolorbox, datatool, intcalcパッケージなどを利用して宛名ラベルの差し込み印刷に挑戦してみました。 TeXエンジンは、フォントの変更がしやすいという噂のLuaTeX-jaを利用することにしました。 datatool はデータセットからdata plotや表作成などが行えるLaTeXパッケージです。日本語では ブログ天地有情  [LaTeX] datatool --- CSVデータからグラフやテーブルを作成 で使い方を見ることができます。csvなどの外部データを利用することもできて、今回は作成したcsvファイルを読み込み、定型フォーマットに文字列を流し込むのに利用しました。 準備 まずは宛名ラベルの差し込み印刷に利用するcsvファイルを用意します。今回は 疑似個人情報データ生成サービス を利用して、次の画像ようなcsvファイル(personal_information.csv)を作成しました。 csvファイルのヘッダ部分は取り除いています。ヘッダ部分がある場合もdatatoolの記述を変えれば利用できるようです。各列の意味は次の通りです。括弧内はdatatoolで扱う際のkeyを表しています。 名前(Name) 郵便番号(PostalCode) 住所1(Address) 住所2(address) ご家族様表記の有無(ToFamily) 連名1(Family) 連名2(family) 出力結果 上のcsvファイルを元に作成した宛名ラベルのpdfファイルの画像を載せておきます。あくまでも画像の住所・氏名はダミーで実在しません。 1枚目の画像は印刷後に余ったラベルシールの再利用を想定して、ラベル開始位置を指定できるようにし、開始位置をずらしたものです。画像では4番目のラベル位置から宛名を配置していま...

定理を再掲したときに定理番号も揃える(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} \begin{document} \section{amsmath.styに含まれるtagコマンドの挙動} \begin{equation} \label{eq:euler} e^{i\theta}=\cos\theta +i\sin\theta \end{equation} \eqref{eq:euler} \section{amsmath.styに含まれるtagコマンドの挙動の検証} \begin{equation} \label{eq:euler2} \tag{\ref{eq:euler}} e^{i\theta}=\cos\theta +i\sin\theta \end{equation} \eqref{eq:euler2} \end{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環境にジャンプします. このような現象が起こるのは,上記のファイルをタイプセット...