忘れたときに備えた記録

トップ «前の日記(2008-03-10(Monday)) 最新 次の日記(2008-03-31(Monday))» 編集
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|
2020|03|

2008-03-23(Sunday)

モジュールメソッドをクラスに継承させる

モジュールの特異メソッドをinclude先で再定義する - ’(rubikitch wanna be (a . lisper))を読んだのですが、Forwardableのようにクラスをextendしてこんな風にするのはどうでしょうか?

#!/usr/bin/ruby
module Mod
   module Methods
      def hoge
         puts "HOGE"
      end
   end

   extend Methods

   def self.included(klass)
      klass.extend(Methods)
   end
end

class C
   include Mod
end

Mod.hoge
C.hoge

実行するとこんな感じです。

~$ ruby -v test.rb
ruby 1.8.6 (2007-06-07 patchlevel 36) [i486-linux]
HOGE
HOGE

要は

  1. クラスに継承させたいメソッドをモジュール内モジュールに分離する
  2. モジュール自身も内モジュールをextendしておく
  3. クラスがincludeしたら、自動的にextendするようにincludedを定義しておく

といっか具合です。

Tags: Ruby

primeについて その2

先々週の続きです。2週間近く空いてしまいました…

まず、$\prime$でデカいプライム記号が表示されなかったと言う話ですが、あれは僕の環境でその時MathML用フォントが入っていないのが原因で、フォントを入れたらちゃんとデカいプライムが表示されました(いきなり直っていたのでびっくりした)。

さて。

改めていろいろなプライムをMathMLで表示してみました。

primes

これは、MathMLを直接書いて表示させたもので、ソースはこんな感じです。

  <mi>a</mi>
  <mo>'</mo>

  <mi>a</mi>
  <mi>'</mi>

  <mi>a</mi>
  <mo mathvariant="italic">'</mo>

  <mi>a</mi>
  <mo>&prime;</mo>

  <mi>a</mi>
  <mi>&prime;</mi>

  <msup>
    <mi>a</mi>
    <mo>&prime;</mo>
  </msup>

  <mi>a</mi>
  <msup>
    <mo></mo>
    <mo>&prime;</mo>
  </msup>

表示で見たときに一番プライムっぽいのが右の2つですが、MathML的には変な気もします。でもLaTeXでも ' はsuperscription扱いらしいので($$A^a'$$をLaTeXに通したら"Double superscript"のエラーが出ると始めて知りました)これで良いのかも?

次点で右から2、3番目が良いかもしれません。見栄えもそこそこプライムっぽいし、MathMLでも3番目なんかは「演算子をitalicで表示」と一番それっぽいように思えます。

ところが。上の画像はUbuntuでの表示を撮ったものなんですが、同じMathMLをWindowsのFirefox+MathMLフォントで表示したところ…

primes on winXP

なぜそこでアポストロフィが出るのか!しかも変な隙間までできているし

表示だけはそれっぽい2番目のは、MathMLとして見たときにプライムを識別子として記述しちゃっているので駄目です。

というわけで、$'$は

 <msup>
    <mi>a</mi>
    <mo>&prime;</mo>
 </msup>

に変換してみることにしました。これから作業に着手です。

MathMLライブラリ0.8.1を公開しました

今気がついたのですが、0.8.0に更新したときにその事をここに書き忘れていました(汗

今更ですが、まずは0.8.0への更新分です

  • SimpleLaTeX.new(:delimiter=>"$")としたときに正しく動作しなかったバグを修正
  • パスの有無などで2回requireされた場合に無限ループするバグを修正
  • REXMLを使用せずEimXML必須にした
  • \bm命令を追加(t-nissieさんにパッチを提供していただきました)
  • その他
    • Rakefileの導入
    • ディレクトリ構成の変更
    • gem化に伴うコメントの英語化
    • などなど

次に、0.8.1への更新分です

  • $a'$を、$a^\prime$とほぼ同じに変換するようにした($a''$も$a^{\prime\prime}$とほぼ同じになる)
  • その他、雑多な修正

ほぼ同じというのは、$a^{\prime\prime}$は

<msup>
 <mi>a</mi>
 <mrow>
  <mo>&prime;</mo>
  <mo>&prime;</mo>
 </mrow>
</msup>

になるのですが、$a'$の方は

<msup>
 <mi>a</mi>
 <mo>&prime;&prime;</mo>
</msup></math>

になるようにしているからです。

Tags: 更新

お詫び

実は今回の$a''$の件は、去年11月の頭にt-nissieさんから報告を頂いていました。

しかし、ちょうどその頃、セミナーでの発表の準備やそれに続いて始めたBayesフィルタの開発があって、すっかり忘れてしまっていたのです(RTMのタスクにも入れ忘れていた)。

長い間放置してしまい、本当に済みませんでした。お恥ずかしい限りです。

[]