名前: misc 日時: 2004-05-03 10:51:12 IPアドレス: 219.108.34.*
>>28654 >\baselinestretchには、たとえば、2.345というような >実数の倍率が欲しいのですが、 spを単位とした整数では、 >まずいように思います。 それはそうでしょう. しかし,先の発言ではあなたが行った計算の意味を述べただけです. つまり,計算の仕方がまずい,というだけのことです. # 以下のことは“算数”レベルのことなので,説明するのも # かえって失礼かもしれませんが. 2 個の正整数 p,q に対し,実数 p/q を10 進小数で表記した文字列が 必要ならば,次のように考えればいいわけです. # ただし,実数 x に対し,x の(10 進小数で表記したときの) # 小数部分を切り捨てた値を <x> と書くことにします. # TeX(に限らず,“整数型”の数値を取り扱う場合)では正整数 p を # 正整数 q で割った結果は実数 p/q ではなく,整数 <p/q> となります. ・<p/q> は,p/q の整数部分 ・p を q で割ったときの剰余の 10 倍(10 (p - <p/q> * q), これを p' とおきます)を q で割ったときの商(<p'/q>)は p/q の小数第 1 位となります ・小数第 2 位については p' を q で割ったときの剰余の 10 倍を q で割ったときの商となります ・小数第 3 位以下については,“以下同様”です これをマクロで実現すればよい,というだけです. (具体的には,『LaTeX 自由自在』の 4.3.3 項には書いてあります. 28416 で提示したコードのうち,\@unmagnify@fontsize の中にも “寸法(実数)の除算”を行うコードが含まれています.) >これも、\strip@ptもパラメータが足りないというエラーになってしまいます。 私が実験した限りでは,これは再現しません. 例えば, \makeatletter \@tempdima2pt \edef\baselinestretch{\strip@pt\@tempdima} \makeatother の場合,\baselinestretch は 文字列“2”に展開されるマクロ になります. >\strip@ptの定義を参考に >\def\Rempt#1.#2pt{#1.#2} >というマクロを作ってやってみましたが、 ># (中略) >\Remptに渡すとうまく行きません. “マクロの引数の書式指定文字列に含まれる個々の文字のカテゴリーコード” にも注意しなければならないのですが, その点について学習なさったことはありますか? カテゴリーコードが絡む問題に不慣れなら,マクロ作成に関する 然るべき解説書を参照なさったほうがよろしいでしょう. “\the + \dimen レジスタ”が生成する文字列中の p,t は通常の (カテゴリーコード 11 の)p,t ではなく,カテゴリーコードが 12 に なっている p,t です.したがって,“\the + \dimen レジスタ”が 生成する文字列から文字列“pt”を取り除きたい場合には, カテゴリーコード 12 の文字からなる文字列“pt” を取り除くように定義しなければなりません. ファイル latex.ltx における \strip@pt の定義には あれこれと細工がなされていますが,その細工は 書式指定文字列“pt”を正しく与えるための細工です. >それを\baselinestretchに設定するには、 >数値にしないといけないのではないか “実数を 10 進小数で表記した文字列”で与えても構わない, ということは,ごく簡単な実験を行えば確認できることでしょう.
この書き込みへの返事: