2012年4月28日土曜日

意図せず明朝化

今朝ニコニコ超会議の生放送を見たら、プレーヤーがZero仕様になっていました。
生放送なので動画視聴プレーヤーの仕様とはまた違うでしょうが、いろいろ気になる点はありました。一つだけ、画面サイズが大きくなってコメントのサイズはどうなってるんだろう?

下図は視聴者の方が実際に投稿していたコメントと、ブラウザのズームを125%にして既存のプレーヤーで自分が同じコメントをしたもの(黄枠で囲まれた方)を比較したところです。


重ねると完全に一致。これを見た限りでは、単にズームしたのと同じことなのかなぁと思いました。

報道によればZeroはまず5月1日にプレミアム会員のみ対象にリリース、以前の仕様変更の時と同じように旧モード(現在は原宿)に戻すこともできるようです。

ニコニコ動画は5月1日に「niconico」に進化 - AV Watch

上の記事だとID数2725万人のうちプレミアム会員162万人とあります。プレミアムにする人は視聴の頻度が高いでしょうから、この数字で一般:プレミアムのリアルな比率は測れないでしょうが・・・まぁ新旧両モードが併存してるうちに、ゆっくり調べてみたいなーと思います。

さて、この件とは全然別の話です。
先日ニコニコチャンネルでアニメを見てたら、気になるコメントがありました。


 「あ」を見てわかる通り、画面全体で明朝化(フォントの連れ回し)が発生してるわけではありません。他のコメントがなんともないのに、「前後の~」のコメントだけが明朝化(SimSun化)してました。
不思議に思って調べたら、「繋(U+7E4B)」が異体字(U+7E6B)になっていました。U+7E4Bであればこのようなことは起こりません。


MS Pゴシックにはどちらもあるのですが、CJKコードページの定義の有無が異なりました。

Unicode 字形 CP932 CP936 CP949 CP950
U+7E4B 8C71 BF8E - -
U+7E6B - C04D CDA8 C3B4

U+7E6Bの方はCP932にだけ定義が無く、SimSun化文字として働くようです。
それにしてもこのコメントをした方はなんで異体字を使ったんだろう?と思ったら、 変換ではどちらも出てくるんですね。下図の左はGoogle日本語入力、右はMS-IME2010です。


それでこういうことが起きたのかなぁ?おもしろいなーと思いました。
そう言えば、こういうコメントも見たことがありました。


斜めの矢印記号ってSimSun化文字なんですよね。上の話と同様、CP932にだけ定義がありません。

Unicode 字形 CP932 CP936 CP949 CP950
U+2196 - A849 A2D8 A1F8
U+2197 - A84A A2D6 A1F9
U+2198 - A84B A2D9 A1FB
U+2199 - A84C A2D7 A1FA

SimSun化を回避したい場合、矢印記号が後ろにあるなら簡単です。矢印との間に半角英数字(Arial)をはさんで隣接しないようにすればいいので、ゼロ幅文字を使えば解決できます。


矢印記号が前にある場合は、先頭に「ゴシック化文字」が必要になってしまいます。


っていうか、なんで後ろにある場合は隣接しないようにしただけで明朝化を回避できるのか?
個人的に(プレーヤーの仕様変更とかよりw) 気になるのはこのことです。これが「フォント変化」という現象の本質ではないかなと思うからです。そもそも「フォント変化」という表現自体、適切ではないのかもしれない。おいおい考えていきたいです。

2012年4月19日木曜日

あらためてMingLiUについて(3)

ニコニコプレーヤーの画面がでかくなるという話で、具体的なサイズが公表されていました。

【事前告知】新バージョンZeroに伴う変更 - ニコニコインフォ

当然コメントの表示にも影響あるでしょうが、実物が来ないことにはわかりようがないですね。
リリースされたら、またいろいろ調べてみるのが楽しみです。

さて前回の続きです。XPではMingLiU(PMingLiU)にならないMingLiU化をどう扱うか?
実際そこまで考えるのかという話ですが、まあフォント変化の挙動を見る実験です。

ArialやMS Pゴシックで表示されたままでは、MingLiUと見た目が違うだけでなくコメントの幅まで変わってしまいます。代わりにSimSunにすれば見た目も似せた上で幅も同じにできるでしょう(下図)。
図ではMingLiU化文字にU+02CD、SimSun化文字にU+2506をそれぞれ使っています。


XPの場合、先頭のフォント変化文字とは別のフォント変化をコメントの途中から発生させることができます。例えば先頭がSimSun化でも、途中にGulim化文字を置けばそこからGulimに変わります。一方Vista以降では途中にGulim化文字を置いても変わりません。この違いを利用します。

ただし(2)で書いたように、XP上のMingLiU化文字は(たぶん)CP950に定義がある文字に隣接しなければ豆腐になります。下図はU+2506を2文字目に入れてみたところです。U+2506はCP936にしか定義がありません。


これではU+02CDの幅が縮んでしまい意味がありません。そこでさらに2文字目へCP950に定義がある漢字を入れてみます。


XPでは、これに隣接することでU+02CDがMingLiUの字形で表示されます。またその効果で漢字はゴシックで表示されますが、7のMingLiUと幅は同じです。
そしてXPの特性により、3文字目のU+2506以降はSimSunに変わります。U+2506はCP950に定義が無いため、U+02CDの効果が及ばないのだろうと思います。これで7とXPの幅全体が同じになりました。

2文字目が漢字である必要はありません。CP950に定義があり、かつMingLiUと同じ幅で表示されればいいわけです。下図はCP950に定義があるU+FE52にしてみたところです。


後はフォント変化に利用したこれらの文字を隠してごまかしたいところ。3文字もあるとなかなか厳しいです。


例の方法で画面の外に出してしまえば、まだ実用性があるかなと思います。


ところで本題からそれますが・・・
上の例はWindows 8だとまた別の問題が発生します。 U+2506が縮んでしまうのです。後ろに漢字やひらがなが来ると字形が変わるようです。


旧ブログで、これはSegoe UI Symbolではないかという話を延々と書きました。 PMingLiUのフォントリンクは7も8CPも同じで、なぜこんな現象が起きるのか今のところ謎です。
文字によって起きたり起きなかったりで、下図はU+2506をU+3016に替えて比較したところです。U+3016はU+2506と同じくCP936にだけ定義があるSimSun化文字です。


8はまだベータ版の段階ですから、あまり考えてもしょうがないのかもしれません。ただSegoe UIは8のUIフォントとしてフィーチャーされているので、とても気になっています。

2013/4/13ご質問用の画像追加:



2012年4月11日水曜日

Excel 2010×2003:「リンクされた図」の不具合

「リンクされた図」(旧「図のリンク貼り付け」)でなんかおかしかったので。

セル範囲をコピーして図オブジェクトとして貼り付けるのには、いくつかパターンがあります。下図はセルA1からB5をコピーして4種類のパターンで貼り付けてみたところです。


「カメラ」ってどれだけ知られてるんだろうか。機能としては「リンクされた図」と同じだと思います。
さて、この4つのオブジェクトを少し拡大します。


そしてシートごとコピーしてみたところ:


「リンクされた図」と「カメラ」が元のサイズに戻っています。
いや、実は元のサイズより微妙に縮んでるんですが・・・なんでこんなことが起きるんだろう。

試したら2003でも2007でもこんなことは起きませんでした。2010特有の挙動みたいです。ググってもこんなことを言ってる方は見つけられませんでした。ただ他にも2010だけで不具合の出るケースはあるようです:

Excel2007でリンク貼り付けした表をExcel2010で開くとリンク貼り付けした表がつぶれてしまう。 - Microsoft Answers

まぁでも図のリンク貼り付けってあんまり使われてないんでしょうか。 便利で好きなんですけど。

2012年4月9日月曜日

Excel 2010×2003:FormatConditionsで不具合

VBAからセルに条件付き書式を設定した時の話です。
以下のようなコードでした。説明のため単純にしてありますが、実際はセルによって条件付き書式の内容を変えるという処理でした。そのためセル範囲まとめてではなく、こんな形になってました。

For i = 1 To 10
    Sheet1.Cells(i, "A").FormatConditions.Add Type:=xlExpression, _
        Formula1:="=C" & CStr(i) & "> 0"
    Sheet1.Cells(i, "A").FormatConditions(1).Interior.ColorIndex = 45
Next

Excel 2010で実行した場合、特に問題ないように見えます:


ところが2003で実行するとおかしな結果になりました:


オレンジにならないセルA6の条件付き書式を確認してみました:


なぜかC11を参照しています。 A列を上から見たところ、C1、C3、C5、C7、C9、C11・・・と参照先が1行おきになっていました。
なんでだかはわかりませんがセル位置を相対参照にしていたことが問題なようです。Formula1のところで$をつけるかR1C1形式で絶対参照にすれば、2010と同じ実行結果になりました。

ちなみに相対参照のままの時、実行時にアクティブセルがA1以外だと参照先がさらにズレました。むしろ不具合というならこっちかもしれませんけど、今さら2003の仕様にツッコんでもなーと思ったのでこれ以上は調べませんでしたwとにかく絶対参照にしておけば問題ないみたいでした。

2012年4月4日水曜日

あらためてMingLiUについて(2)

Windows XP上のニコニコプレーヤーでは、MingLiU(PMingLiU)が表示できないわけではありません。旧ブログの時に、フォントリンクへArialを追加してリンク先に表示させたいフォントを設定するという実験をしました。この方法でなら、MingLiUも表示させることはできます。
しかしCJKフォント変化の挙動では、なぜかMingLiUだけが表示されません。フォント変化が起きないのではなく、起きているにもかかわらずArialやMS Pゴシックなど他のフォントで表示されます。7・Vistaとは字形だけでなく文字幅まで異なってしまいます。このことがコメントに利用する際ネックになると思います。

まずMingLiU化文字自体がどう表示されるか見てみます。

(1)に掲げた一覧の通り、知る限りでMingLiU化文字はU+02CD・U+2027・U+2574の三つしかありません。実はこの他にも私用領域になら多数あり(おそらくU+E865からU+F848の範囲全部?)、最初にMingLiU化を教えていただいたのもU+EF04という文字でした。しかし私用領域ということは環境によって何が表示されるか予想できず、あえて使う必要もないのかなと思います。


さてXPの表示です。各MingLiU化文字は、単独の状態および「あ」に隣接した状態では豆腐です。三番目の図は間に全角スペースをはさみました。こうすると字形が表示されています。
MingLiU化文字に隣接した「あ」(U+3042)と全角スペース(U+3000)の違いは、コードページ950での定義の有無ではないかと考えています。

Unicode CP932 CP936 CP949 CP950
U+3000 8140 A1A1 A1A1 A140
U+3042 82A0 A4A2 AAA2 -

コードページ950に定義がある文字に隣接すれば、字形が表示されるのではないかということです。ただしこれはU+3000以降の話で、それより前のコードポイントの文字では何に隣接させてもどうも豆腐のままみたいです(全部確かめたわけじゃないですが)。XPのこの挙動においては、隣接する文字がCJK文字と判別された時に変化が起きるように思います。その判別が具体的に何によるものかは今のところわかりません。

豆腐はArialの字形だと思います。Arialにこの3文字はいずれもグリフが無いため、全部豆腐なのでしょう。一方全角スペースに隣接して字形が表示された方は、調べたところMicrosoft Sans Serifでした。Microsoft Sans Serifにもこの3文字は無いのですが、フォントリンクが使われていました。


リンク先のフォントのグリフの有無は以下の通りです。

フォント名 02CD 2027 2574
MS UI Gothic -
SimSun - - -
Gulim - - -
PMingLiU

つまりU+2027・U+2574はMS UI Gothic、U+02CDはPMingLiUで表示されていると考えられます。リンク先からそれぞれ削除して確認してみました。MS UI Gothicを削除後:


U+2027・U+2574が全角の字形に変わりました。PMingLiUで表示されるようになったのでしょう。さらにPMingLiUも削除後:


3文字とも豆腐になりました。この太字で細長い字形はMicrosoft Sans Serifの豆腐だと思います。なぜここでMicrosoft Sans Serifなのかはわからないのですが、XPではSimSunでグリフの代替が行われる時にも同じ挙動があります。そういう役割のフォントなんでしょうか。

ともかく、これでU+02CDだけが7と同じPMingLiUで表示されていることがわかりました。MS UI GothicのU+2027・U+2574はPMingLiUより文字幅が縮んでしまうので、7・Vistaとコメント幅を同一にするならU+02CDを使うしかなさそうです。

ではMingLiU化文字をXP上で実際どう使ったらいいんだろうという話は、次で書きたいと思います。