コードリーディングのための書体

プログラムを書くときには等幅フォントを使うのがいいと思いますが、読むときにはプロポーショナルフォントもありだと思います。実際、書体に注目しながらプログラミングに関する書籍を読むと、意外と頻繁にプロポーショナルフォントが使われていることがわかります。

プログラミング言語C++ (アスキーアジソンウェスレイシリーズ―Ascii Addison Wesley programming series) (単行本)(1) Stroustrup 『プログラミング言語C++』

C++のバイブル、Stroustrup 『プログラミング言語C++』第3版では、コード中の識別子はプロポーショナルフォントのイタリックで印刷されています。曰く、

固定ピッチフォントのコードを見慣れたプログラマには、この表記スタイルは最初は“不自然”に見えるかもしれない。しかし、一般に、テキストの提示方法として、プロポーショナルフォントは固定ピッチフォントよりも優れていると考えられている。プロポーショナルフォントを使えば、非論理的な改行の数も減る。私が試してみたところでも、しばらくすると、ほとんどの人々がこのスタイルの方が読みやすいと感じるようになった。(p.33)

これは読みやすいと思いますが、記号など、イタリックにはならない文字もあるのがやっかいです。何らかのツールが必要でしょう。たとえば、膨大な機能を誇るWordでも、特定の文字種を除外するのは面倒でしょう。安易に、すべてをセリフ・イタリックにしたりすると台無しです。

4797375957第4版では等幅フォントになりました。

文芸的プログラミング (ASCII SOFTWARE SCIENCE Programming Paradigm) (単行本)(2) Knuth 『文芸的プログラミング』

Knuth 『文芸的プログラミング』では、(2)のように書体が使われています。擬似コードを印刷するときによく用いられている方法ですが、実際のコードで使ってもいいと思います。

Knuthの本はタイポグラフィの勉強にもいいのですが、『文芸的プログラミング』にはこんな話も載っていました。

ある学生は、FindInNewWordsという名前を用いた。これは印刷するとあまりきれいでない。大文字は小文字の直後に並べるようにデザインしていない場合が多い。複合名詞を使用しないですますことはまず無理だから、WEBにはうまい解決法を用意してある。WEBでは、たとえばget_wordのように、短い下線で語をつなぐことができる。(p. 311)

WikiなどではfindInNewWordsのようないわゆるCamelCaseがよく用いられますが、印刷する可能性がある場合には、使わない方がいいかもしれません。(Knuthなりの対処法が『文芸的プログラミング』で紹介されています。)

C++の設計と進化 (単行本)(3) Stroustrup 『C++の設計と進化』

(1)でのStroustrupの試みが普及することを期待していたので、(1)の後に出た『C++の設計と進化』(日本語版)のコードが等幅フォントになってしまったのはちょっと残念でした(原著は確認していません)。等幅フォントは、プログラムの印刷に最もよく使われているのはフォントですが、必ずしも読みやすいとは言えません。(本の内容はすばらしいです。)

Programming: Principles and Practice Using C++ (ペーパーバック)(4) Stroustrup Programming: Principles and Practice Using C++

1000ページを超えるプログラミング入門書(形容矛盾?)であるProgrammingでは、プロポーショナルフォントが復活しました。これが現時点でのStroustrupの結論だと考えていいのでしょう。すべてサンセリフ(というかセリフ無しローマン)に統一するこの方法は、特別なツール無しで実践できていいと思います。

4798119598日本語版では等幅フォントです。

個人的には、ちょっと手間のかかる(2)が、authenticで好きです。

括弧のフォントは内容ではなく周囲のテキストに合わせます

The Chicago Manual of Style (ハードカバー)カーニングがおかしいのを放置するのはおかしいという記事中で「(John 3;16)」という例を使いました。カーニングがおかしいせいで、「(」と「J」、「6」と「)」が重なってしまうことがあるという話です。

そもそも、括弧がローマン体でその中身がイタリック体なのがおかしいのであって、「(John 3:16)」のようにすれば問題ないのでは、という疑問がありました。

まず、『The Chicago Manual of Style』の6.6節にあるように、括弧のフォントは内容ではなく周囲のテキストに合わせるのが原則です。つまり、括弧の周囲がローマン体なら括弧もローマン体、括弧の周囲がイタリック体なら括弧もイタリック体にします。内容のフォントは関係ありません。(この記事を書いている時点での英語版Wikipediaの記述は間違っています。)

ノンデザイナーズ・タイプブック (単行本)『The Chicago Manual of Style』は最も信頼される手引きなので、これに従えばいいと思いますが、この原則は「絶対」というわけではなさそうです。たとえば、『ノンデザイナーズ・タイプブック』では、「括弧の中がすべて同じフォントなら括弧自体もそれに合わせる」というルールが紹介されています。

アメリカ英語に限って言えば、Chicagoが一番の権威だとは思いますが、「括弧のフォントを内容に合わせたい」という考え方も、まあ、ありなのかもしれません。

では、括弧をイタリック体にすればカーニングの問題は解決するかと言うと、そういうわけではありません。Adobe InDesignならカーニングを「オプティカル」にしておけば大丈夫ですが、Wordは個別の調整が必要です(このGaramondの例では、左括弧の後の文字間隔を2ptにしなければなりません)。

Wordで欧文を使うなら、Palatinoが一番問題が少ないということはここでも言えそうです。内容にあった書体を使うのが原則ですが、この際、Palatinoにふさわしいことを書くようにするのがいいのかもしれません。

Wordで作った文書が素人臭くなる理由(その5)

カーニングがおかしいんです。

どちらかと言えば、これはWordの問題と言うよりはフォントの問題だという気もしますが、たとえば、Adobe InDesignならカーニングとして「オプティカル」を選択すれば、ここで紹介する問題は(だいたい)回避できるので、Wordが無責任だとは言えないでしょう。

カーニングの問題とは、次のようなものです。

Times New Romanは特にひどいです。デフォルトの文字間隔で組むと、このように隣り合う文字が重なってしまいます。素人臭さをなくすためには、文字単位で間隔を調整しなければなりません。fの後の文字間隔を1ptにすれば、下のように解決できるのですが、これはかなり面倒なことです。

Palatinoは何もしなくても大丈夫です。

Garamondは調整が必要です(fの後の文字間隔を2ptにしなければなりません)。

似たような問題は、括弧の中にイタリック体を書いたときにも発生します。下はTimes New Romanの場合です。

今回もPalatinoは大丈夫です。

この例のような問題は、文字間隔ではなくベースラインを調整することによって解決するものなのかもしれません。しかし、下の例のGaramondでは、間隔の調整も必要でしょう(左括弧の後と6の後の文字間隔を2ptにしなければなりません)。

以上のような問題を放置すると、見た目がとても素人臭くなってしまうので要注意です(江渡浩一郎『パターン、Wiki、XP』は、この点でちょっと損していると思います。まさかWordで組版したわけではないでしょうが)。とはいえ、文字間隔を個別に調整するのは面倒なので、最初に書いたように、Adobe InDesignのような、高機能なソフトウェアの利用を検討した方がいいでしょう(ただし、InDesignもGaramondはちょっと苦手かもしれません)。

気を遣うのが面倒な人は、デフォルトの欧文フォントをPalatinoにしてしまうのも1つの手です。Palatinoなら、ここで紹介したような問題は起こりにくいようです。ちなみに、OfficeにはBook AntiquaというPalatinoに似たフォントが搭載されていますが、Palatinoの作者であるZapfさんが次のような発言をしています。

欧文書体 2 定番書体と演出法 (タイポグラフィの基本BOOK) (単行本)「大手ソフトウェア会社が『Book Antiqua』と称し Palatino の低級なコピーを搭載しているが、私の方には何も知らされておらず、デザインの修整もできないし、当然1セントのロイヤリティも支払われない。大会社ならば、みずから最高の Palatino を開発して使うべきではないのか。書体制作には数年間かかるが、それをコピーする側は何の手間もかけていない。何も知らないユーザは、その会社が書体の開発費を正当に払っているものと思いこむのではないか」(小林章『欧文書体2』 p. 93)

というわけで、Book Antiquaは使わない方が良さそうです(書体の開発費のことを考えているユーザなんてほとんどいないと思いますが)。Palatinoという正統のフォントがWindowsに搭載されているにも拘わらず、Book Antiquaというまがい物をOfficeに入れておかなければならない理由がよくわかりません。そういう趣味があるなら、Arialというまがい物だけでなく、Helveticaも搭載してほしいものです。

各フォントの各文字にどのようなカーニング設定がなされているかは、fontforgeを使えば確認できます。

Wordで作った文書が素人臭くなる理由(その4)

デフォルトの欧文フォントがどういうわけかCenturyなのです。

Windowsに付属するCenturyはちょっと中途半端なフォントで、イタリック体がありません。Wordの「i」と書かれたアイコンは、イタリック体にするためのものだと思うのですが、Centuryのイタリック体はないので、下のような斜体になります。

century

斜体はローマン体を単に傾けただけのものであって、イタリック体ではありません。それにも拘わらずCenturyを使う人は、ちょっとどうかしてるんじゃないかと思います。サンセリフの場合はイタリック体=斜体でもいいのですが、Centuryはセリフなので、イタリック体と斜体を同一視してはいけません。たとえば、Palatinoでは下のようになります。ローマン体とイタリック体では、デザインがかなり違います。

palatino

Times New RomanやPalatinoのような、筆記体風のイタリック体のある立派なフォントが備えられているのに、なぜデフォルトの欧文フォントがCenturyなのか、なぜイタリック体のためのアイコン「i」で斜体にせざるをえないようなフォントを使うのか、Microsoftの製品には、私の想像の範囲を超えることがたくさんあります。

欧文書体―その背景と使い方 (新デザインガイド) (単行本)小林章『欧文書体』によれば、Times New Romanの作者であるスタンリー・モリスンは、1926年の論文「理想的なイタリックに向けて」の中で、「完璧なイタリック体はすなわち傾いたローマン体である」と書いているそうです(p. 18)。モリスン自身はこのアイディアに執着しなかったことはTimes New Romanに筆記体風のイタリック体があることからわかりますが、Microsoftはこのアイディアを忠実に継承しているということなのでしょうか。

LaTeXでGaramondを使う方法

Garamond(ギャラモン、ガラモン)と言ってもいろいろありますが、URW Garamondと呼ばれるGaramondをLaTeXで使うことができます。

導入方法は以下の通りです(Windowsの場合)。

  1. CTANからGaramondをダウンロード・展開する。
  2. C:\tex\share\texmf\fonts\type1\urw\garamondに*.pfbをコピーする。
  3. C:\tex\share\texmf\fonts\afm\urw\garamondに*.afmをコピーする。
  4. C:\tex\share\texmfでugm.zipを展開する。
  5. コマンドプロンプトで「updmap -add ugm.map」
  6. .texファイルのプリアンブルに次のように記述する。(参考:奥村晴彦『LaTeX2ε美文書作成入門』
    \usepackage[T1]{fontenc}
    \usepackage{textcomp}
  7. 本文に次のように記述する。
    \fontfamily{ugm}\selectfont

以上で本文フォントはURW Garamondになります。

Windows上のLaTeXでヒラギノを使っているなら、再設定が必要になるかもしれません。