名前: ari 日時: 2005-06-04 15:35:06 IPアドレス: 130.54.130.*
化学式を入力する際, H$_2$O,Bi$_2$Sr$_2$CaCu$_2$O$_{8+\delta}$ のようにいちいち入力するのが面倒なので (実用よりも興味本位,ということもありますが), \chem{H_2O},\chem{Bi_2Sr_2CaCuO_{8+\delta}} で同様の出力ができるように下記のような 数式バージョンchemおよびマクロ\chemを定義してみました. \def\chem#1{% 化学式記述用のマクロ \def\x{\mathrm{x}}% `x' --> \x \def\y{\smash{\mathrm{y}}}% `y'を出力したい場合は \y と入力. \mathversion{chem}\ensuremath{#1}} \def\sb#1{_{\mathit{#1}}}% 添え字をイタリックにする \DeclareMathVersion{chem} \SetSymbolFont{letters}{chem}{OT1}{cmr}{m}{n} \SetSymbolFont{varletters}{chem}{OML}{cmm}{m}{it} \DeclareMathSymbol{x}{\mathalpha}{varletters}{`x}% x,yは変数として用いるため \DeclareMathSymbol{y}{\mathalpha}{varletters}{`y}% イタリック体で出力 % 数字は\mathordにして\sb使用時の字体変更を抑制 \DeclareMathSymbol{0}{\mathord}{operators}{`0} \DeclareMathSymbol{1}{\mathord}{operators}{`1} \DeclareMathSymbol{2}{\mathord}{operators}{`2} \DeclareMathSymbol{3}{\mathord}{operators}{`3} \DeclareMathSymbol{4}{\mathord}{operators}{`4} \DeclareMathSymbol{5}{\mathord}{operators}{`5} \DeclareMathSymbol{6}{\mathord}{operators}{`6} \DeclareMathSymbol{7}{\mathord}{operators}{`7} \DeclareMathSymbol{8}{\mathord}{operators}{`8} \DeclareMathSymbol{9}{\mathord}{operators}{`9} ## x,yのみイタリックにしているのは, ## 元素置換量を変数とするような化学式,たとえば ## La$_{2-x}$Sr$_x$CuO$_4$ ## などの出力を ## \chem{La_{2-x}Sr_{x}CuO_4} ## で得られるようにするためです. ## また,添え字の変数にx,y以外を用いたい場合は ## _ の代わりに \sb を用います. このマクロを用いますとほぼ所望の結果が得られるのですが, figure環境などにおいて\captionに\chem{…}を記述した場合に 意図しない出力となってしまいます.たとえば, \begin{figure} \begin{center} \includegraphics[width=5cm]{sample.eps} \caption{\chem{Bi_2Sr_2CaCuO_{8+\delta}}の結晶構造} \label{fig:Bi2212} \end{center} \end{figure} とした場合に,普通は「図* Bi…の結晶構造」となるはずなのですが, この場合「図*」のところが「(」(半角の開き丸括弧)に化けてしまいます. (ただしカウンタの値はきちんと処理されています) jarticle.cls,jsarticle.clsいずれにおいてもこの現象は起こります. ただ, \begin{figure} \begin{center} \includegraphics[width=5cm]{sample.eps} \caption{{\chem{Bi_2Sr_2CaCuO_{8+\delta}}}の結晶構造} \label{fig:Bi2212} \end{center} \end{figure} のように\chem{…}を{\chem{…}}にすれば今説明したような問題は生じません. \chem内部において数式バージョンをchemに変更した影響が 外部に及んでいると思われますが,未だに原因がつきとめられず, 質問させていただいた次第です. (おそらく原因は初歩的なプログラムミスでしょうが…) もしお分かりになる方がいらっしゃればご教授いただけると幸いです.
この書き込みへの返事: