top page > TeX > here

TeX に関する tips


概要

内容は次のようなものです.

  1. 物理量の単位の記述
  2. 分子式の記述

目次

1. 物理量の単位の記述
2. 分子式の記述
3. 配布ファイル
4. 補記
5. 参考資料

1. 物理量の単位の記述

物理量の単位を記述する際には,書体として Roman 体を使う必要があります. (例えば 参考資料 [4] p.16) 単位は本文中にも数式中にも書く可能性があるのですが,それらの環境ごとに

kg\,m$^2$/sec$^2$
\text{kg}\,\text{m}^2/\text{sec}^2

のように書き分けていたのでは煩雑ですし,おちおち Copy & Paste もできません. まあ,本文中でも

$\text{kg}\,\text{m}^2/\text{sec}^2$

と書くか,または数式中で単位全体を \text{} の中に入れて

\text{kg\,m$^2$/sec$^2$}

と書くことにすれば統一はできますが,もう少し何とかしたいところです.

\ensuremath を活用すれば,本文中でも数式中でも統一した記述が可能になります.

\newcommand{\Unit}[1]{\ensuremath{\mathrm{#1}}}   % 例えばこのように定義しておいて,

\Unit{kg\,m^2/sec^2}                              % このように使います.

この優位性は,記法が統一されるというだけでなく,読み書きが容易になり文書の推敲が楽になることです.

さらに,お好みで次のような package file を作ります. (ファイル名を unit.sty とします.)

\NeedsTeXFormat{LaTeX2e}[1996/12/01]
\ProvidesPackage{unit}[2007/11/15 v.1.0 Unit]
%---------------------------------------------------------------
\newif\if@colour  \@colourfalse
\newif\if@default \@defaultfalse
%
\DeclareOption{colour}{\@colourtrue}
\DeclareOption*{\@defaulttrue}
%
\ProcessOptions
\if@colour
   \PackageInfo{unit}{Color is selected.}
   \RequirePackage[dvips]{color}
\else \if@default
   \PackageInfo{unit}{Undefined option is used.}
\fi \fi
%---------------------------------------------------------------
%
\def\degC{^\circ\mspace{-2mu}C}
\def\angstrom{\text{\AA}}
\def\hyphen{\text{-}}
%
\if@colour
   \def\@green{\textcolor[named]{Green}}
\else
   \def\@green{}
\fi
%
\newcommand{\Unit}[1]{\ensuremath{\mathrm{\@green{#1}}}}

\endinput

これを TeX のソースの冒頭で次のようにして取り込むことにより利用します. この例のように,どちらか一方を comment out して下さい.

%\usepackage{unit}% for monochrome   % 色は黒.印刷用.
\usepackage[colour]{unit}            % 色は緑.確認用.

色を着けられるようにしたのは,文中で \Unit{} の使用漏れがないかの点検を容易にするためです. (これは最近作ったものなので,それ以前の TeX の原稿では使っていないのです.)

2. 分子式の記述

分子式においては,元素記号や数値の書体に Roman 体を使う必要があります. (例えば 参考資料 [5]) 先述の単位と同様に,分子式も本文中にも数式中にも書く可能性があります. この場合,先述の unit.sty と同じ要領で書くことができます. そのまま流用して \Unit{H_2} のように記述しても良いでしょう.

ただ,例えば水素分子は \Chem{H2} のように書きたいところです. そこで,次のような package file を作ります. (ファイル名を chemeq.sty とします.)

(途中までは unit.sty と同様なので省略します.)
%---------------------------------------------------------------
\if@colour
   \def\@red{\textcolor[named]{Red}}
   \def\@violet{\textcolor[named]{Violet}}
\else
   \def\@red{}
   \def\@violet{}
\fi
%
\newif\if@strcmp
\def\Chemstrcmp#1{%
         \strcmp{#1}{H2}   \if@strcmp {\@red{H_2}}
   \else \strcmp{#1}{H2O}  \if@strcmp {\@red{H_2O}}
   \else \strcmp{#1}{O2}   \if@strcmp {\@red{O_2}}
   \else                              {\@violet{#1}}
\fi \fi \fi%
}

\newcommand{\Chem}[1]{\ensuremath{\mathrm{\Chemstrcmp{#1}}}}
\newcommand{\NOx}{\protect\Chem{NO_{\mathnormal x}}}

\newcommand{\Chemt}[1]{\ensuremath{\mathrm{#1}}}

\endinput

これを TeX のソースの冒頭で次のようにして取り込むことにより利用します. この例のように,どちらか一方を comment out して下さい.

%\usepackage{chemeq}% for monochrome   % 色は黒.印刷用.
\usepackage[colour]{chemeq}            % 色は赤.確認用.

これを,次のように利用します.

\begin{equation}
2\,\Chem{H2} + \Chem{O2} \to 2\,\Chem{H2O} % 反応式はこのように書く.
\end{equation}

\Chem{2\,H_2 + O_2 \to 2\,H_2O}            % このように \Chem{} の中に反応式も書けるが,やめておきたい.

\Chem{NO_x} では x はテキストのフォントが使われる.
x として数式のフォントを使いたいので,\NOx を別途定義した.

\section{ \Chemt{H_20} }  % ここに \Chem{} を使うとエラーになる.

色着きを選んだ場合,if 文に引っ掛かれば赤,そうでなければ紫になります. 当然,chemeq.sty に記述されていない分子,例えば \Chem{N2} は,色が紫になるだけでなく 2 が添字になりません. 記述する分子はすべて chemeq.sty に追加する必要があります. (単原子分子や OH などはする必要はないし,多原子分子も \Chem{N_2} のように書けば大丈夫なのですが. 意識が「紫色を探すモード」になると,これらは意外と目障りです. 登録しましょう. なお,記述している分子を抽出するフィルターも作りました. それは配布ファイルに同封します.)

そのような登録の必要のない,もっと頭の良い package file が書ければ良いのですが,難しいですね.[1]

また,\Chem{}\chapter{}\section{} の中では使うことができません. そこで代わりに \Chemt{} を用意しました. この中ではすべて \Chemt{N_2} のように書かなければなりませんし,色も着きません. この点も可能ならばなんとかしたいです.

[1] sed や自作のフィルターを使って TeX の原稿の中の \Chem{} の中を書き換えることも考えたのですが,やはり TeX の内部で完結させるべきだと考え,追求するのをやめました.

3. 配布ファイル

ここで関連するファイルと必要なマニュアルを配布する予定です.

4. 補記

これまで,FreeBSD 4.9 のまで環境では cls file として,もっと古い FreeBSD の ports に収録された古いものを修正して使い続けてきました. 具体的には /usr/local/share/texmf/ptex/platex/base/jarticle.cls 等を修正して ~/texmf/ptex/platex/base/ に置いていました. jarticle.cls の version は以下の通りです.

\ProvidesClass{jarticle}
  [1998/12/24 v1.1o Standard pLaTeX class]

ところが,これを FreeBSD 7.2 に収録された TeX の環境で用いると,\mathrm が効かなくなります. (上記の unit.sty, chemeq.sty を狙いすましたような仕様変更ですね.) 新たな環境に添付された jarticle.cls を用いれば,この問題は生じません. その version は以下の通りです.

\ProvidesClass{jarticle}
  [2006/06/27 v1.6
 Standard pLaTeX class]

自前の cls file は永久に使えるとすら思っていたのですが,甘かったですね.

5. 参考資料

[1]「改訂新版 TeX ブック」Donald E.Knuth, 斎藤 信男 監修,鷺谷 好輝 訳,アスキー出版局 (1992)

[2]「The LaTeX コンパニオン」Michel Goossens, et.al, アスキー書籍編集部 監訳,アスキー出版局 (1998) p.259,p.527

[3] /usr/local/share/texmf-dist/tex/latex/ にて次のようにすれば,使用例が見つかります.

% grep ensuremath */*.sty

[4] 次の資料は SIunits.sty のマニュアルですが,SI 単位系やその記述法も詳しく解説されています.

/usr/local/share/texmf-dist/doc/latex/SIunits/SIunits.pdf

[5] すみません. 確か IUPAC の引用として読んだように記憶しているのですが,資料が出てきません.
  見つかり次第,ここに反映させます.