2015/04/30

VS2013 で Consolas + MS ゴシック (Meiryo でも可) を実現するもう一つの方法

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:ファイルとかのアップロードは、また次の機会。