名前: しっぽ愛好家 日時: 2003-01-11 16:17:33 IPアドレス: 210.230.96.*
>>14928 \ifthenelse の使用法を間違っています. まず,ifthen パッケージを用いても a >= b の形式の条件を扱うことはできません. %%% \not{a < b} と書き換えるか,今のように整数を扱っている場合には %%% a > b - 1 (ただし,b - 1 は(式ではなく)具体的な数値で記述します) %%% のように書き換えます. さらに,ifthen パッケージでは \arabic{#1 + 1} の #1 + 1 のような, 計算式を扱う機能は提供していません.calc パッケージを用いると, \setcounter や \setlength の際に計算式を用いることができるようになりますが, その場合でも \arabic{#1 + 1} のような記述はできません. %%% 一時的に使用するための LaTeX のカウンタ temp を(\newcounter{temp} %%% として)用意しておき, %%% \setcounter{temp}{#1 + 1}\arabic{temp} %%% のように処理します.(要 calc パッケージ) また,(提示していただいた)\Fnsymbol の定義は,\Fnsymbol の引数として LaTeX のカウンタ名を用いる定義にはなっていません. %%% \ifthenelse の引数の中で #1 < 6 のような比較をしていますが, %%% これは #1 が(LaTeX のカウンタ名ではなく,数値であることを %%% 仮定した記述になっています. さまざまな事情により(*),\Fnsymbol の引数には(LaTeX カウンタ名ではなく) 数値を用いた方がよいので,ここでは,\thefootnote の定義も変更して \Fnsymbol の引数を数値で与えるようにします. %%% (*) 詳しくは,LaTeX におけるマクロ作成について解説した文献を %%% 参照してください.ここでは,\thefootnote は \protected@edef に %%% よるマクロ定義時にも問題なく使えるように定義しなければならない, %%% という点を指摘するにとどめます. 以上のことに注意すると,次のように定義を変更すれば (おそらく)意図どおりに動作します. %%% ifthen パッケージだけでなく calc パッケージも用いてください. %%% なお,ここで用いた \DeclareRobustCommand は ``robust な'' コマンドを %%% 定義するためのマクロです.(使用法は \newcommand と同様です.) \newcounter{temp} \DeclareRobustCommand{\Fnsymbol}[1]{% \ifthenelse{#1 > 0 \and #1 < 6}% {\setcounter{temp}{#1 + 1}\fnsymbol{temp}}% {\ifthenelse{#1 > 5 \and #1 < 8}% {\setcounter{temp}{#1 + 2}\fnsymbol{temp}} {\setcounter{temp}{#1 + 8}\arabic{temp}}}}%%% (**) \makeatletter \def\thefootnote{\expandafter\Fnsymbol\expandafter{\the\c@footnote}} \makeatother %%% なお,(**) の行では #1 に 8 を加える必要はないようですが, %%% オリジナルの定義をそのまま書き換えました. %%% まあ,私はふだんのマクロ作成では ifthen パッケージは %%% 決して使用しないので,ifthen パッケージの機能の見落としは %%% あるかもしれませんが… しかし,この場合には,\@fnsymbol の定義を書き換えて, \def\@fnsymbol#1{% \ensuremath{% \ifcase#1\or \dagger\or \ddagger\or \mathsection \or \mathparagraph\or \|\or \dagger\dagger \or \ddagger\ddagger \else \number#1% \fi}} とでもした方が,簡明だと思うのですが,どうでしょうか. %%% この場合,\thefootnote の定義は %%% \def\thefootnote{\fnsymbol{footnote}} %%% として構いません.
この書き込みへの返事: