Adobe-Japan1-6のすべてのグリフを1ページで

この記事で作るもの:Adobe-Japan1-6の全23058グリフを1ページで (PDF, 5MB)

Unicodeの文字の一覧を作ったのに続いて、Adobe-Japan1-6のグリフの一覧を作ります。自分で作らなくてもAdobe-Japan1のグリフ一覧は、

しかし、自分で作れるようになっていれば、全グリフを1ページにといった、自分の好きなレイアウトの一覧表が作れます。

改訂版が出るたびに買っている奥村晴彦, 黒木裕介『LaTeX2ε美文書作成入門』(技術評論社, 第6版, 2013)にも、判型が変わった頃から“Adobe-Japan1全グリフ”が掲載されているのですが、書体が小塚明朝ではなくヒラギノ明朝なので、ここでの目的には適しません。以前書いたように、小塚明朝では区別され、ヒラギノ明朝では区別されない漢字のペアがあるので、ヒラギノ明朝では全グリフにはならないのです。『基本日本語活字見本集成』の著者の一人である小形克宏さんも、ブログで次のように書いています。

このページをより一般的なヒラギノ明朝で組むという話が出たとき、ぼくはかなり強く小塚明朝でなければ信頼性を担保できないことを主張しました。仮にヒラギノ明朝でAdobe-Japan1-5を表しても、それはヒラギノとしての実装解釈を示したにすぎず、仕様制定者の本来の意図が見えなくなってしまいます。Adobe-Japan1は文字コード規格ではなく、あくまでも「グリフ」セットなのですから、小塚明朝のタイプフェイス・デザインを前提とするのは自明の理であり、その意味で小塚明朝で掲載されたことは至極当然と言えるでしょう。『基本日本語活字見本集成本OpenType版』のこと (1)

というわけで、小塚明朝で作ります。

小塚明朝とTeXLiveがインストールされた環境で、「kanji-config-updmap kozuka-pr6n」として小塚明朝を埋め込めるようにします。Adobe-Japan1-6のCIDは、0から23057まで、間を空けずに使われているようなので、単純な繰り返しをするTeXファイルで一覧を作れます。こうして作った一覧表が冒頭のPDFファイルです(改行の制御に不満があります@doraTeXさんのコードを参考に修正しました)。

Unicodeのすべての文字を1ページで

この記事で作るもの:Unicode 6.0のすべての文字を1ページで (PDF, 23MB)

4327377368ヨハネス・ベルガーハウゼン, シリ・ポアランガン『世界の文字と記号の大図鑑 ー Unicode 6.0の全グリフ』(研究社, 2014)の著者はUnicode 6.0の全109242文字2時間30分かけて見るビデオの作者ですか。今度は1024ページの書籍。「Decodeunicode」で画像検索すると原著が出てきますが、楽しみですね。(追記:世界の文字と記号の大図鑑

「Unicodeのすべての文字を印刷した本って、前にもなかったっけ?」と思って本棚を探したのですが、勘違いでした。

0321480910頭に浮かんだのはThe Unicode Consortium『The Unicode Standard, Version 5.0』(Addison-Wesley Professional, 2006)(文献リストあり、索引なし)だったのですが、この本は、(1) The Unicode Standard、(2) Code Charts (PDF)から漢字を除いたもの、(3) Han Radical-Stroke Index (PDF)という構成でした。つまり、漢字はコードポイント順に一つずつではなく、Han Radical-Stroke Indexという形で掲載されているだけでした。

Unicode 5.0より後は、紙媒体ではないようですが、たとえば6.0について同じことをするなら、 (1) The Unicode Standard (PDF)、(2) Code Charts (PDF)、(3) Han Radical-Stroke Index (PDF)を使うことになるのでしょう。(Code Chartsには漢字も含まれているので、「文字の一覧(番号順)」が欲しいだけならCode Chartsだけで十分です。)

これらの資料もいいのですが、こういうのは、自分でもちょっとやってみたいところです。例えば、Unicodeの全文字を1ページに、なんてことも、自分で作れるようになればできます。

というわけで、必要なデータをEnumerated Versions of The Unicode Standardから探して作ろうとしたら、これがなかなか面倒でした。

Unicode 6.0の全文字は、UnicodeData.txtに載っているはずですが、この第1列をHTMLの数値文字参照に置き換えるだけでは終わりません。

UnicodeData.txtには、CJK統合漢字など、1行1文字になっていない部分があります。それを補うのは面倒なので、Unicode 5.1以降で導入されたUnicode Character
Database in XML
を使うことにします。このXMLファイルは、char要素1個が1文字に対応します。

XMLファイルには、印刷できない文字?も含まれているので、それを除外しなければなりません。Unicode 6.0のコードポイントは109449個ありますが、そのうちGraphic Characterは109242個です(参照)。『世界の文字と記号の大図鑑』の109242文字というのはこれのことなのでしょう。Graphic Characterの定義General_Category ValuesThe Unicode Standard Chapter 2 General Structureの「Table 2-3. Types of Code Points」を見ると、char要素のgc属性値がCから始まるものとZl, Zpになっているものは除外しなければならないことがわかります。(異体字セレクタのような、明らかに印刷不能な文字が残るのですが、とりあえずはそのままにします。それを使う異体字もここでは数えません。)

というわけで、ちょっとスクリプトを書いて、Unicode 6.0の文字の一覧を作ります。

こんなHTMLファイルです。このファイルは、Unicodeの文字を数値文字参照で書いてあるだけのものなので、文字を実際に表示できるかどうかは環境によります。Noto花園明朝などを入れた環境で、Firefox 31とChrome 36を試したところ、FirefoxはUnicode 6.0のすべての字形を表示できたようですが、Chromeはぜんぜんだめでした(目視以外の確認法がわかりません)。

Windows上のFirefoxでAdobe PDFに印刷した結果が冒頭のPDFファイルです。

完成に必要な無料フォントを列挙する(あるいはもっとよい方法の提案)という自由研究を、どこかの小学生がやってくれることを期待します。

関連:Unicodeのすべての文字を1回ずつ使って絵を描く

追記:The Unicode Map Projectがすばらしいです。

MathematicaのClusteringComponentsの困ったところ

Mathematica 9.0, 10.0, 10.1, 10.2, 10.3, 10.4.1, 11.2, 11.3 for Microsoft Windows (64-bit)と10.0.0 for Linux ARM (32-bit)でのことです。

Mathematicaには、階層的クラスタリングができる関数が3つ用意されています。FindClustersAgglomerateClusteringComponentsです。

FindClustersにはバグがありました。(FindClustersのバグは11で解決)

Agglomerateにはバグがあります。

バグではありませんが、ClusteringComponentsにも困ったところがあります。データをn個のクラスタに分けたいと思ってClusteringComponents[array,n]としても、できるクラスタがnより少ないことがあるのです。マニュアルには「最高でn個のクラスタを求める」とあるので、nより少ないのはバグでは無いのですが、ちょうどn個のクラスタを作りたいときに使えないのは困ります。

次のコードで再現できます。

data = Import["https://gist.github.com/taroyabuki/4996086/raw/be3b2d537a51b803790fa1149cc714663a8b6ee9/clustering_test_data2.csv"];

Length[Union[ClusteringComponents[data, 13, 1, DistanceFunction -> EuclideanDistance, Method -> "Optimize"]]]
(* 12 *)

13個のクラスタを作りたかったのですが、できたクラスタは12個でした。

データをシャッフルしてからならうまくいきます。

Length[Union[ClusteringComponents[RandomSample@data, 13, 1, DistanceFunction -> EuclideanDistance, Method -> "Optimize"]]]
(* 13 *)

というわけで、階層的クラスタリングをしたいときはRを使うのがよさそうです(参考)。

自由なフォントNotoの、同じ形の漢字、似ている形の漢字

フォントNoto(Google版)Source Han Sans(Adobe版)が発表されました。自由なフォントです。ウェイトがそろっているのがいいですね。

じっくり試してみたいところですが、祭りのうちに、と思ってちょっといじってみました。

Notoに含まれる同じ形の漢字(?)は以下の通りです(クリックで拡大)。

Notoに含まれる似ている形の漢字(?)には以下のようなものがあります(クリックで拡大)。拡大して見ると確かに違うのですが、ぱっと見では区別できません(どこまでを「似ている」と見なすかは人それぞれです。基準を緩めれば該当する文字が増えます)。

UnicodeやAdobe-Japan1との関係は調べていません。ごめんなさい。漢字は苦手です。

関連

フリーソフトウェアで風景から歩行者を消す方法(FFmpeg, ImageMagick)

先日「風景から歩行者を消す手軽な方法」をMathematicaで実装したのですが、「なんでMathematica? 持ってないし。高いじゃん」という意見があったので、フリーソフトウェアを使う方法を紹介しましょう。「風景から歩行者が消えていく様子」が要らないならこれで十分かも知れません。(Raspberry PiのMathematicaなら無料なのですが、非力なのでこの話には使いにくいでしょう。)

Ubuntuで試します。(WindowsでもFFmpegとImageMagickを入れればできるかもしれません。)

sudo apt-get install libav-tools imagemagick

ffmpegで動画を画像に分解し、convertでまとめます。(Ubuntu 14.04ではffmpegavconvに置き換えてください。)

ffmpeg -i movie.mov -f image2 %d.png
convert -evaluate-sequence mean *.png mean.jpg

meanmedianに置き換えれば平均ではなく中央値を使うようになりますが、処理時間がかなり増えます。