Re: マクロの出力を場合分けする方法

名前: misc
日時: 2002-11-08 00:09:18
IPアドレス: 210.224.211.*

>>12701 >引数#1のチェックはどのようにしているのでしょうか? \ifcase は整数の値による多肢分岐を行う primitive です. 引数 #1 が整数である場合には, \if#1% (#1 = 0 の場合の処理) \or (#1 = 1 の場合の処理) \or (#1 = 2 の場合の処理) ... \else (#1 が上記のいずれにも該当しない場合の処理) \fi のように用います. %%% あまり詳しくなっていないようですが,実は先程の \@xyz の定義例が %%% \ifcase の説明になっているようなものです… %%% %%% ただし,先程の定義では引数 #1 は整数であることを仮定しました. %%% %%% 整数であるか否かの検査は行っていません. >#1が数字ではなく,引数#1が > n の場合 \frac{d}{d#2}, > p の場合 \frac{ \partial }{ \partial x } >と分岐させる時は \ifcase のあたりをどのように変えれば良いのでしょうか? オプション引数が確実に 1 文字であるとわかっている場合には 次のような方法もあります. \def\xyz{\relax\@testopt\@xyz{n}}%%% デフォルトのオプションは n \def\@xyz[#1]#2{% \if #1n\relax \frac{d}{d#2}\fi%%% #1 が文字 n である場合. \if #1p\relax \frac{\partial}{\partail #2}\fi%%% #1 が文字 p である場合 } %%% #1 が n, p のどちらでもない場合には何もしません. %%% \if #1n というのは #1 と文字 n を比較し,文字コードが一致していれば %%% ``真'' となります.\if #1p についても同様に文字 p との比較を行います. %%% %%% ただし,引数 #1 はただ 1 文字であると仮定していることに %%% %%% 注意してください. オプション引数が任意の文字列となり得る場合には, \ifx による比較を行うことになります. \def\xyz{\relax\@testopt\@xyz{n}} \def\@xyz[#1]#2{% \def\@tempa{#1}% \def\@tempb{n}% \ifx\@tempa\@tempb \frac{d}{d#2}\fi \def\@tempb{p}% \ifx\@tempa\@tempb \frac{\partial}{\partial #2}\fi} %%% \ifx\@tempa\@tempb というのは \@tempa と \@tempb が ``同じ意味'' %%% であるか否かを調べ,同じ意味であれば ``真'' となります. %%% 次の定義は,オプション引数 #1 と他の文字列との比較を %%% 行うわけではありませんが,オプションの個数が増えると %%% かえって簡明になります. %%% \def\@xyz[#1]#2{% %%% \def\@tempa{#1}\@onelevel@sanitize\@tempa %%% \@ifundefined{@@xyz@\@tempa}% %%% \relax %%% {\@nameuse{@@xyz@\@tempa}{#2}}} %%% \def\@@xyz@n#1{\frac{d}{d#1}}%%% オプション n に対応する処理 %%% \def\@@xyz@p#1{\frac{\partial}{\partial#1}}%%% オプション p に対応する処理

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)