1 ポイント 投稿者 GN⁺ 3 시간 전 | 1件のコメント | WhatsAppで共有
  • LaTeXとInkscapeで同じ 10.8pt × 7.2pt のグリッドがずれるのは、両ツールが異なるポイント定義を使っているため
  • LaTeXは1ptを 1/72.27インチ、InkscapeはSVG・PostScript系の 1/72インチ として計算する
  • ポイントは1517年から使われている タイポグラフィの単位 だが、初期には会社・機材・国ごとに大きさが異なっていた
  • アメリカ式の印刷ポイントはNISTの 0.013837インチ の定義とTeXの72.27pt/inの定義へとつながっており、その差はごくわずか
  • PostScriptが基本ユーザー空間を 1/72インチ と定め、LaserWriterによって普及したことで、CSS・SVG・Inkscapeにも定着した

LaTeXとInkscapeでポイントがずれる理由

  • Logic for Programmers の図表を作り直す過程で、LaTeXとInkscapeの 10.8pt × 7.2pt グリッドが同じ大きさに合わない問題が起きた
  • LaTeXは1ポイントを 1/72.27インチ と定義しており、これは約0.3515mm
  • Inkscapeは1ポイントを 1/72インチ としており、これは約0.3528mm
  • 差は約 0.4% にすぎないが、広く使われる2つのデジタルツールが異なるポイント単位を使っている結果になっている

ポイントの起源と標準化の問題

  • ポイント ) は1517年から続く タイポグラフィの単位 で、印刷業者が意味のある最小サイズとして扱える大きさという性格を持っていた
  • 初期のポイントは標準化された単位ではなく、会社や機材によって異なる大きさが使われていた
  • その後標準化が進んだが、国ごとに異なる基準が採用された
    • ドイツと日本のポイントは 0.250mm
    • フランスのポイントは 0.399mm とされる
  • 初期のコンピュータ史がアメリカ中心に展開されたため、デジタル技術では主にアメリカ式ポイント系が使われるようになった

アメリカ式ポイントとTeXの72.27pt/in

  • アメリカでは19世紀末ごろにポイントの標準化が行われたが、当時の資料ごとに数値が少しずつ異なっていた
  • 1900年の資料ではポイントの長さを 35/996cm としており、これは1インチあたり72.281ポイントに相当し、同時に1フィートあたり867.4699 “ems” ともしているため、1インチあたり72.289ポイントになる
  • 1916年の資料では標準パイカ(pica、12ポイント)を 0.16604インチ とし、1フィートあたり72.272 “pica ems” を示しているため、1インチあたり72.272ポイントになる
  • 同じ資料の次のページでは、パイカを 0.166044インチ、ポイントを正確に 0.013837インチ と再び示している
  • こうした違いは、メートルとフィートの定義が時代とともに変わったこと、また差がミクロン未満で実務上は無視されやすかったことと関係している
  • NISTの公式定義 ではポイントを 0.013837インチ と定めており、単純計算では1インチあたり72.27ポイントに近い
  • 実際に0.013837インチを逆算すると 72.270001ポイント/インチ となり、Donald Knuthはこの微小な差をTeXで調整した
  • TeX72.27pt = 1in と定義する
    • TeXの “pt” は、1886年にAmerican Typefounders Associationが定義した公式印刷ポイントよりわずかに大きい
    • 古典的な1ポイントは正確に 0.99999999pt で、誤差は約1億分の1
    • 72.27pt = 1inという新しい定義は計算しやすく、覚えやすい
  • アメリカの印刷業者はインチを基準にポイントを定義したが、TeXはポイントを基準に計算し、インチをポイントで定義する
  • NISTは 72ポイント/インチ も十分な近似と見なしているようで、TeXではこれを bp(big point)と呼ぶ

PostScript、CSS、SVG、Inkscapeの72pt/in

  • Inkscape側の値は、PostScript形式の 基本ユーザー空間(default user space) の定義に由来するようだ
  • PostScript文書ではx軸とy軸の単位長を 1/72インチ と定め、これを基本ユーザー空間と呼ぶ
  • この単位は数学的な単純さと利便性のために選ばれ、印刷業界の標準測定単位であるプリンターポイント 1/72.27インチ に非常に近いものとして扱われた
  • その後の 86ページ では、1/72インチをそのまま “ポイント” と呼んでいる
  • 後続版 では、1/72インチはポイントとほぼ同じだが正確には同一ではなく、ポイントには普遍的な定義がないと整理している
  • Appleは LaserWriter レーザープリンタにPostScriptを搭載し、他社もこれに追随したことで、PostScriptは事実上の印刷言語になった
  • その結果、72ポイント/インチ がデジタル測定の標準のように定着した
  • W3Cも CSSSVG で同じ基準を採用している
  • InkscapeはSVGエディタであるため、Inkscapeのポイントも 1/72インチ 系になる
  • SVGエディタの draw.io は、ポイントサイズを 1/100インチ とする別の例外である

Frinkに残る単位定義の痕跡

  • 単位サポートが強いチューリング完全言語 Frink でも、ポイント定義の痕跡を確認できる
  • Frinkで1959年以前のインチを基準に1900年の資料の値を計算すると、次のようになる
oldinch := surveyfoot / 12 // pre 1959 inch
35 cm / (996 pts) -> oldinch / pts
0.013834839357429718876
point :=          0.013837ee0 inch    // exact, NIST Handbook 44, Appendix 3
printerspoint :=       point

texscaledpoint :=      1/65536 point    // The TeX typesetting system uses
texsp :=               texscaledpoint   // this for all computations.
computerpoint :=       1/72 inch        // The American point was rounded
computerpica :=        12 computerpoint // to an even 1/72 inch by computer
postscriptpoint :=     computerpoint    // people at some point.
  • ここで “computer people at some point” が指している転換点は、PostScriptの 1/72インチの基本単位 と結び付く
  • Frinkの texscaledpoint の定義はTeXの実際の定義とごくわずかに異なる
  • TeXの実際のポイントを基準に書き直すと、次のようになる
realtexpoint := 1/72.27 inch
realtexsp := 1/65536 realtexpoint
(realtexsp - texsp)
5.36285100578e-17 m (length)
(realtexsp - texsp) / realtexsp
1.0000000000005691827e-8
  • Frinkの定義差は約 50アトメートル で、陽子の幅の約3%の水準
  • TeXは実際の計算に “scaled points” を使い、2^16 sp = 1 pt である

1件のコメント

 
GN⁺ 3 시간 전
Lobste.rsの意見
  • 最後にFrinkに触れているところで、US Survey InchInternational Inchの違いが出てくる
    以前、international inchがどんなものかについて書いたことがあるが、度量衡の話の中でも好きな事例なので、1900年前後でpointの定義が違っていたのは、当時の測定精度の限界による可能性が高そうに見える
    Knuth TeX pointとNIST pointの差は、異なるinchの定義を基準にしたときに生じる差よりもさらに小さい
    金属活字をフレームに詰めたり、Linotypeで鉛活字を鋳造したりするときに生じるばらつきは、こうしたpointの差を見分けるのに必要な精度をはるかに上回っていたため、当時の印刷技術では実際には問題にならなかったはず
    コンピュータの1/72 inch pointについてのもう一つの歴史的背景として、1980年代のAppleディスプレイは通常1インチあたり72ピクセルだったので、1 pointが1 pixelであり、ソフトウェアが画面上の文書サイズを印刷ページに合わせやすかった

    • もう一つ思い浮かぶのは、タイプライターラインプリンターも重要な技術だったという点
      タイプライターは名目上1インチあたり6行で、11インチ用紙に1インチあたり72.27 pointの12 point文字を書くと、66行ではなくほぼ66.25行になる
      タイプライターでは1ページあたり1/4行の差は大した問題ではないかもしれないが、連続帳票に大量出力する場合には、ページ長が行間の整数倍でないと位置合わせが保てないため重要になる
      デスクトップ出版以前の数十年間、給与明細や銀行明細のようなコンピュータ印刷が大きな用途だった
      レーザープリンター以前のグラフィック出力にはドットマトリクスプリンターが使われており、これもやはり連続帳票の1インチあたり6行間隔に合わせて設計されていた
      そのため、デスクトップ出版で1インチあたり72 pointを採用したのには下位互換性の理由があったのだろうが、組版よりも古い低解像度のコンピュータ印刷技術との互換性を狙ったものに見える
      一方でKnuthのTeXの目標は写真植字機だったので、従来の印刷で使われていた寸法に合わせる必要があった
    • 私も最初は、その違いはsurvey inchとstatute inchの差だと思っていた
    • Joが単一の25.4 mm inchブロックを選んだ理由は、やや単純化されているように思う
      アメリカとイギリスの度量衡では測定温度を少し異なって規定しており、両方の標準に適合するブロックを作るには、当時可能だった精度の限界まで加工する必要があった
      Jo blocksが広く普及したのは、Henry Fordがそれをひどく気に入って、Victor Kiamのように会社ごと買ってしまったからだ
  • ああ、pointは正確に1/72 inchで定義されているものだと思っていた
    Rich Text Format、つまりRTFファイルには、ほとんどの寸法に使われる「twip」という別の単位があり、これはpointの1/20である
    その歴史は知らないが、pointが私の思っていたものではないのなら、twipもそうではないということになり、誤差が累積するわけで、なんとも困る

  • リンクは間違っていたが、面白く読んだ
    測定単位はモデルに似ていて、正しいかどうかより有用かどうかが重要だ
    学校の課題が12 pointフォントだけを求めるなら、その数字が正確に何を意味するのかはあまり重要ではない
    飛行機が毎秒point単位で飛んでいたなら、もっと標準化された単位があったかもしれない

  • いまだにptを使う理由があるのか気になる
    何か利点があるのか、それともimperial systemのように惰性で残っているだけなのか分からない

  • pointは1インチあたり72 pointであるべきだというのは当然に思える。12 × 6 = 72だからだ
    むしろ、それ以外の値で標準化した人がいたことに本当に驚く

    • なぜ12×6なのか?
    • ニュースレターには入っていなかったが、分岐した理由は、印刷業者がすでにpica寸法を使っていたからだ
      その値はおよそ1/6 inchだったが、実際には印刷会社ごとに少しずつ異なっており、標準picaは最も一般的に使われていた実寸に合わせて選ばれた