いろいろ
Seize the day.
2005-11-18 [長年日記]
■ [comp] Helvetica と Arial のマイナスとハイフン
MATLAB の吐いた EPS ファイルを Illustrator で開くと,マイナスがハイフンになっちゃってる,という話を以前したが (というかそれ以前にマイナス記号が消える.なんとかしてくれ) [2005-01-19],なんか突然我慢できなくなって調べてみた.長いので,忙しい方は最後のまとめをご覧下さい.
マイナス記号は別に用意されていた
MATLAB 固有の問題というより,PostScript フォント (Helvetica,Courier) の問題らしい.PostScript フォントにはハイフン (0x2d,HYPHEN-MINUS) の他にちゃんとマイナス記号 (0xb1) があるらしい (後述するが,厳密にはこれはマイナスではなくエンダッシュらしい).例えば gnuplot なんかでは,やはりマイナスがハイフンとして出力されてしまう問題があり,gnuplot のソースを書き換えるだとか,PostScript 中のハイフンを半角ア (0xb1) で置き換えるだとかいう方法があるようだ.
- http://www-lab14.kuee.kyoto-u.ac.jp/~kyamamot/gnuplot.html
- http://www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/gnuplot/
なぜか±が出て来る
というわけで,Illustrator で半角アを入力すればとりあえず OK じゃね? とか思ったが,甘かった.なぜか「±」が出て来る.Windows の文字コード表を見ると,確かに 0xb1 は±になってる.しかもそれ以外にマイナスっぽい記号は皆無.おかしいなー.ちなみに Helvetica 自体は [2005-02-23] に従ってインストール済だったが,文字コード表に載せるにはさらに $WINDOWS\Fonts にコピーする必要があった.
Helvetica 相当品 Arial を使ってみる
まあ,ともかく,調べていると「Windows では Arial が Helvetica 相当品です」らしい.なにー,そうだったのか. 確かに,英数字はほぼ同じ形のようだ.
重ねてみると記号などは微妙に違うのがわかる.

ともかく,Arial では Helvetica が使えなかった Unicode が使えるようなので,マイナスも出せるかも知れない.
というわけで,Arial のコード表を調べると,Unicode で 0x2212 に MINUS SIGN という名の記号がある.おお,あった! とか思ったが,なぜか Illustrator で使おうとすると「???」とかに化けてしまう.どうも Illustrator 10 では Unicode が扱えないようだ.がーんん (Illustrator CS 以降は対応してるらしい.が,いまいち踏み切れない [2005-07-14]).
ちなみに Word や PowerPoint では,この通りちゃんと表示されるんだがなー.
0261 でマイナス出た!
…と半ば諦めかけつつ,試しに gnuplot が吐いた PostScript から,ハイフン記号をエディタで直接半角アに書き換えて Illustrator で読んでみた.すると…マイナス出た!!

出ました.マイナス記号.なんだ,Helvetica のフォントセットにちゃんとあるんじゃん.
じゃあ,これは PostScript コードとしてはどうなってるんだ? ってことで,以下のような EPS ファイルを Illustrator で作り,中身を見てみた.

PostScript ファイル内では
/Helvetica findfont /Encoding get
dup 45 /hyphen put
dup 48 /zero put
dup 51 /three put
dup 127 /plusminus put
dup 177 /endash put
pop
%ADOEndSubsetFont
/Helvetica*1
[
45{/.notdef}repeat /hyphen 2{/.notdef}repeat /zero 2{/.notdef}repeat /three 75{/.notdef}repeat /plusminus
49{/.notdef}repeat /endash 78{/.notdef}repeat
] /Helvetica nfnt
/Helvetica*1 findfont [14 0 0 -14 0 0 ]mfnt sfnt
0.5 271.424 mov
(\261) sh
8.284 271.424 mov
(300) sh
0.5 288.924 mov
(-300) sh
0 305.924 mov
(^?) sh
8.17599 305.924 mov
(300) sh
となっているようだ.けっこう複雑で,どこか 1 行書き換えたら済むようなもんではない.マイナスじゃなくてエンダッシュだったこともここで気がつく.ちなみに 177 = 0261 = 0xb1 である.あれ? やっぱりマイナス (エンダッシュ) のコードは 0xb1 で合ってたんじゃん.±はというと,コード 127 になっている.じゃあ Windows が間違ってたのか??
コード 0261 の指す文字はエンコーディングに依存する
しかし,今度は MATLAB が吐く EPS のマイナスを \261 にしたり「ア」にしたりすると,やっぱり±になるんである.だんだん混乱してくる.さらに調べてようやくわかった.
This would be an "endash" (i.e. a dash - with the width of a letter n) in the "Adobe Standard" encoding, but is a "plusminus" in the "ISO Latin 1" encoding.なにゅー.紛らわしすぎる.MATLAB の吐く EPS をよくみると,
/Helvetica /ISOLatin1Encoding 168 FMSRという行があった.ああーこれか.というわけで,思い切って
/Helvetica /StandardEncoding 168 FMSRにしてみたところ,めでたくマイナス記号が出るようになった.なんかどっかに悪い影響が出そうな修正法だけど,とりあえず自分の簡単な EPS では問題ないようだ.
昔,PostScript を MATLAB で編集するというネ申な人が職場にいたりしたがww,そこまで MATLAB に詳しくないので,
perl -p -i.bak -e 's/ISOLatin1/Standard/; s/^\(-/(\261/; ' *.epsとかすればいいんじゃないかと.
ちなみに "ISO Latin 1" encoding の "endash" (アスキーコード 0227) も試してみたが,ただのハイフンと見分けがつかなかったので却下.
まとめ
- Helvetica でマイナス記号を使おうとすると,ハイフン (0x2d,HYPHEN-MINUS) になってしまう.
- マイナス記号 (に近いもの) を使いたければ,エンダッシュ (0xb1,ENDASH) を使えばよい.
- ただし Helvetica のエンコーディングには StandardEncoding と ISOLatin1Encoding があり,前者では 0xb1 はエンダッシュだが,後者では 0xb1 はプラスマイナス (±) をあらわしている.しかも後者にはエンダッシュが存在しない.
- MATLAB の吐く EPS は ISOLatin1Encoding なので,s/ISOLatin1/Standard/ したうえで,マイナス記号を \261 で置き換えるとよい (多分 s/\(-/(\261/ とかすればよいのかも).
なお,PostScript のコードによっては,以上の操作でファイルが壊れる可能性があります.責任は負いませんので,必ずバックアップを取るなり,アンドゥできる状態で編集するなりしてください.
おまけ
Helvetica vs. Arial (格ゲーの一種らしい.よほど Arial に恨みがあるようだ)
[TrackBack URL: http://nao.s164.xrea.com/td/tb.rb/20051118]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]
[(注) スパム対策のため,言及リンクのないトラックバックは受け付けていません.]
本日のリンク元
検索
- エンダッシュ ×9 / キーワード不明 ×6 / Helvetica illustrator ×6 / helvetica arial ×6 / Illustrator ps フォント helvetica ×6 / postscript 記号 コード表 ×5 / マイナス記号 イラレ ×5 / tex マイナス ハイフン ×4 / gnuplot -- マイナス ×3 / gnuplot エンダッシュ ×3 / pdf Illustrator ハイフン ×3 / MATLAB マイナス ×3 / powerpoint helvetica ×3 / powerpoint, Helvetica, Windows ×3 / endash 文字コード ×3 / endash minus ×3 / helvetica マイナス コード ×3 / マイナス フォント ×3 / endash 入力 ×3 / Illustrator マイナス ×3 / gnuplot プラスマイナス ×2 / Arial コード ×2 / Windows ハイフン マイナス 入力 ×2 / illustrator エンダッシュ 入力 ×2 / Helvetica postscript ×2 / matlab プラスマイナス ×2 / helvetica adobe ×2 / ダッシュ マイナス gnuplot ×2 / postscript minus - ×2 / postscript pdf ハイフン ×2 / 文字コード helvetica ×2 / Illustrator Unicode ×2 / エンダッシュ 入力 ×2 / postcript マイナス記号 ハイフン gnuplot ×2 / ハイフンのいろいろ ×2 / illustrator 10 記号 ×2 / illustrator ± プラスマイナス ×2 / Helveticaコード表 ×2 / マイナス アスキーコード ×2 / matlab helvetica latex ×2 / MATLAB plus minus ×2 / gnuplot ハイフン マイナス ×2 / gnuplot マイナス 記号 ×2 / tex ハイフン マイナス ×2 / 半角 ア "\261" ×2 / 文字コード マイナス ×2 / matlab pdf フォント ×2 / illustrator プラスマイナス + - ×2 / illusutrator 10 helvetica ×2 / gnuplot "プラスマイナス" ×2 / \261 半角ア ×2 / ハイフン マイナス記号 ×2 / エンダッシュ TeX ×2 / tex - マイナス ハイフン ×2 / illustrator gnuplot フォント Helvetica ×2 / gnuplot 記号 ×2 / MATLAB eps 数字 マイナス 消える ×2 / Word マイナス記号 ×2 / helvetica Windows ×2 / 文字コード表 Helvetica ×2 / Word マイナス ダッシュ ×1 / Arial マイナス ハイフン ×1 / タイピング ハイフン ダッシュ ×1 / tex マイナス記号 ×1 / helvetica latin1 ×1 / HTML 文字化け ハイフン N ×1 / Matlab Helvetica ×1 / illustrater マイナス 入力 ×1 / helvetica マイナス ハイフン ×1 / Arial コード表 ×1 / unicode コード表 マイナス ×1 / tex 記号 ハイフン ×1 / ARIAL コード表 ×1 / マイナス ハイフン 入力方法 ×1 / gnuplot helvetica ×1 / windows helvetica ×1 / minus sign ハイフン ×1 / フォント マイナス ハイフン ×1 / eps マイナス ×1 / tex マイナス 表示記号 ×1 / プラスマイナス ASCII コード ×1 / helvetica マイナス ISOLatin ×1 / helvetica minus Encoding ×1 / WORD マイナス ×1 / マイナス コード 45 windows ×1 / ADOEndSubsetFont ×1 / 半角記号 プラスマイナス ×1 / illustrator unicode ×1 / illustrator エンダッシュ ×1 / 記号 illustrator 10 ×1 / perl ハイフン ×1 / ダッシュ ハイフン マイナス word ×1 / イラストレーター プラスマイナス 記号 ×1 / powerpoint プラスマイナス記号 ×1 / matlab helvetica ×1 / Illustrator 10 ユニコード ×1 / helvetica illustrator ×1 / ttf matlab helvetica ×1 / ハイフン コード ×1 / アスキーコード マイナス ×1
以下の広告はサーバによって自動的に挿入されています.
Copyright © 2004-2006, nao. All rights reserved.






ツッコミテスト.
ツッコミテスト 2.