名前: みなも 日時: 2006-01-13 19:54:27 IPアドレス: 220.209.237.*
>>40659 すでに 小野孝男 さんから,LaTeX での \newenvironment を用いた解答が 寄せられていますが,TeX の \def を使った解答も挙げておきます。 (以下の定義は,\newenvironment の内部で行われていることです。 \@ifnextchar は LaTeX の内部マクロです。 なお,簡単のためマクロ定義は引数を太字にするだけものにします) \def\test{\@ifnextchar[{\@test}{\@test[]}} \def\@test[#1]{\textbf{#1}\ignorespaces} これで \test は \test 単独か \test[オプション] で使えます。 ちなみにこの定義からも明らかなように,\test に続く文字が [ であれば それは無条件でオプションの始まりと認識されます。 \newenvironment を使った環境の例でも「本文」の先頭が [ の場合, それをオプションと誤認します。 このばあい,「オプションじゃないよ」ということを指定するため, \test{} とか \test {[オプションじゃない]} とします。 というわけで,オプションのデリミタは,できれば本文先頭に来ることは あり得ない文字の方が良いかもです。 (安田亨 さんは多分受験業界の人ですよね --- だとしたら僕と同業。 高校数学だと本文先頭が [ で始まることはめったにないんですが, ごくたまにこれに引っかかるので,僕は末尾のオプション変数にはなるべく [ ] を使わないことにしてます。) オプションを <オプション> で入れるなら以下のようになります。 \def\test{\@ifnextchar<{\@test}{\@test<>}} \def\@test<#1>{\textbf{#1}\ignorespaces} 最後に,使い物になるかどうかは別にして(^_^;;),(注:改行位置変更不可) \def\test{\begingroup\obeylines\Test} {\obeylines% \gdef\Test#1 {\textbf{#1}\endgroup}}% これは「ソース」で \test の後同じ行にある文字列を引数にとるマクロです。 つまりソースが \test あいうえお(改行) なら,「あいうえお」が引数になります。 \test(改行) なら,引数は「空」です。
この書き込みへの返事: