VS2013 のコードエディタでのフォントは、Consolas を使っています。
見やすいので重宝しています。
が、全角罫線文字 (U+2500 付近) を使って絵を書くと、ずれてしまいます。
これは、どうも、Consolas がこの U+2500 のグリフを持っているので、代替フォントセット GlobalMonospace.CompositeFont に定義されている文字を使用しないため、のようです。(推測)
Ricty などのフォントを使うのが一般的なようですが、Consolas フォントはライセンスの都合使えませんから、半角文字に Consolas が使いたい、という要望は満たせません。
TTC を合成してしまう方法もあるようです。が、かなり面倒なようです。
調べたところ、VS2008 以前では Windows の FontLink 機能あるいは vsFontLk.dat ファイルで
フォントリンクを作って合成できた、のかもしれません。
が、VS2013 では、WPF/DirectWrite を使用しているため、この方法は使えない、ということのようです。
WPF を使っている、ということなので、IDE のコードエディタが内部で使っているであろう FontFamily プロパティに自分で作成した CompositeFont を指定できれば、なんとかなるのではないかと思ってやってみました。
まず、XML を自力で一から書くのは面倒なため、既存の CompositeFont を流用します。
管理者コマンドプロンプトで作業します。
>C:
>cd C:\Windows\Fonts
>copy GlobalMonospace.CompositeFont MyFont.CompositeFont
>notepad MyFont.CompositeFont
MyFont.CompositeFont を書き換えます。
FontFamily.FamilyNames の内容にフォント名があるので、
<system:string x:key="en-us">MyFont</system:string>
のように
に書き換えます。
<FontFamily.FontFamilyMaps> の 内容 を一度全部消して、
<FontFamilyMap Unicode="0000-007F" Target="Consolas" Scale="1.0" />
<FontFamilyMap Unicode="0080-2FFFF" Target="MS Gothic" Scale="1.0" />
にします。
ここからがちょっとイタイんですが、この複合フォントファイルを VS2013 に指定するまっとうな方法が、ありません。
(裏ワザに近いけど、EtherNEC ほどじゃないです)
VS2013 を立ち上げます。
メニューの、[オプション] - [環境] - [フォント及び色] で、フォントを変えたいところを、既定値以外の特定の値、
例えば Consolas に変えておきます。
あとでエディタで置換するためです。
メニューの [ツール] - [設定のインポートとエクスポート] で、
[選択された環境設定をエクスポート]
次へ
[すべての設定] のところのチェックボックスをクリアして、一度全部クリアされた状態にします。
[オプション] - [環境] - [フォントおよび色] のところだけチェックします。
次へ
ファイル名を付けて保存します。
完了
閉じる
テキストエディタでさっき保存した設定エクスポートファイルを開きます。
置換機能で、
Consolas -> C:/Windows/Fonts/MyFont.CompositeFont#MyFont
に全部置換します。
保存しておきます。
VS2013 に戻り、
編集した設定ファイルをインポートします。
既知の問題
VS2013 のオプション設定画面、フォントおよび色を表示したあとに OK を押すと、設定が失われる(インポートやりなおし)。
MyFont.CompositeFont ファイルを、VS2013 を開いたまま編集して保存して、VS2013 が新しい文字をレンダリングしようとする(スクロールさせる)と、
VS2013 が強制終了する。
当方のモニタ等で合わせ込んだ設定。
8pt 設定
<FontFamilyMap Unicode="0000-007F" Target="Consolas" Scale="1.0" />
<FontFamilyMap Unicode="0080-24FF,2600-2FFFF" Target="Meiryo" Scale="1.09" />
<FontFamilyMap Unicode="2500-25FF" Target="MS Gothic" Scale="1.0" />
---
Windows10 Thinkpad25 VS2017
<FontFamilyMap Unicode="0000-007F" Target="Consolas" Scale="1.0" />
<FontFamilyMap Unicode="0080-24FF,2600-2FFFF" Target="Meiryo" Scale="1.15" />
<FontFamilyMap Unicode="2500-25FF" Target="MS Gothic" Scale="1.1" />
TODO:ファイルとかのアップロードは、また次の機会。
2015/04/30
2015/04/28
C# int.Parse 系関数の挙動
他所様で int.Parse / TryParse が漢数字をパースするっていう話を見て、
(ホントかよ・・?)
ってことでやってみた。
Windows7(日本語)SP1 .Net4.5.1(4.5.51209) VS2013Pro 12.0.31101.00 Upd4
こんなかんじのコード。
ついでなので、
もうひとつ。
結論
カルチャに依存するかもしれないが、全角アラビア数字や漢数字は変換できなかった。
漢数字変換は特に、表記法や位取り法が決定的でないから、考えただけでも嫌気がするぐらい面倒なので、これがシステムでサポートされているとは考えにくい。
(ホントかよ・・?)
ってことでやってみた。
Windows7(日本語)SP1 .Net4.5.1(4.5.51209) VS2013Pro 12.0.31101.00 Upd4
こんなかんじのコード。
public static void hoge(string s)
{
int a;
bool r = int.TryParse(s, out a);
Console.WriteLine(r.ToString());
}
"1" | True | アスキーの 1 なら当然変換できる |
"1" | False | 全角 1 は変換できない |
"一" | False | 漢数字 一 は変換できない |
ついでなので、
char.IsDigit("1", 0) | True | アスキーの 1 |
char.IsDigit("1", 0) | True | 全角 1 |
char.IsDigit("一", 0) | False | 漢数字 一 |
もうひとつ。
char.IsNumber("1", 0) | True | アスキーの 1 |
char.IsNumber("1", 0) | True | 全角 1 |
char.IsNumber("一", 0) | False | 漢数字 一 |
結論
カルチャに依存するかもしれないが、全角アラビア数字や漢数字は変換できなかった。
漢数字変換は特に、表記法や位取り法が決定的でないから、考えただけでも嫌気がするぐらい面倒なので、これがシステムでサポートされているとは考えにくい。
登録:
投稿 (Atom)