type1cm 使用時に \fontsize の指定に対し欧文の文字サイズが単調増加にならない

type1cm 使用時に \fontsize の指定に対し欧文の文字サイズが単調増加にならない

- tipo ling の投稿
返信数: 5

pLaTeX で Computer Modern の文字サイズを自由に指定すべく type1cm パッケージを使ったところ,7.9pt よりも 8.0pt のほうが文字が小さくなりました。

再現コード:

\documentclass{article}
\usepackage{type1cm}

\begin{document}

\def\showsizes#1{
  #1\par
  \setbox0\hbox{\fontsize{#1}{#1}\selectfont W} W: \the\wd0
  \par
  \setbox0\hbox{\fontsize{#1}{#1}\selectfont あ} あ: \the\wd0
  \par
}

\showsizes{7.9pt}
\showsizes{8.0pt}

\showsizes{8.9pt}
\showsizes{9.0pt}

\end{document}

結果:

7.9pt
W: 9.09131pt
あ: 7.6015pt
8.0pt
W: 8.7279pt
あ: 7.69772pt
8.9pt
W: 9.70978pt
あ: 8.5637pt
9.0pt
W: 9.50548pt
あ: 8.65994pt

このように,\fontsize に指定した値に対して,「あ」の文字幅は比例していますが,「W」の文字幅は比例しないどころか,大小が逆転したりします。

上記のコードとは別に,ポイントサイズを 0.1 pt 刻みで,5.9 pt から 11.1 pt まで変化させて,欧文と和文の文字をそれぞれ並べたものを組ませる実験のコードを添付します。

この結果から以下のことが見て取れます。

  • n を整数として,n pt から n+0.9 pt までは「W」の文字幅が単調増加になる
  • n+0.9 から n+1 になるところでガクンと文字幅が小さくなる(ただし n は 9 以下で)

これはどういうことなのでしょうか?

環境は以下の通りです。

  • macOS 15.3.2
  • TeXLive 2025
  • e-upTeX 3.141592653-p4.1.2-u2.00-250202-2.6 (utf8.euc) (TeX Live 2025)
  • dvipdfmx Version 20250205
  • test-type1cm は tlmgr install test-type1cm で導入

LuaLaTeX を使えばフォントサイズまわりの悩みも減るのかなと思いますが,古くに作られ修正困難なスタイルファイルを使う必要から,pLaTeX を使わざるを得ない状況です。

tipo ling への返信

Re: type1cm 使用時に \fontsize の指定に対し欧文の文字サイズが単調増加にならない

- 本田 知亮 の投稿
type1cmはリニアスケールのためのものではないのです.
texdoc type1cm
でマニュアルを開くと,カーライルさんの示唆に富んだ文章がでてきます.

type1cmの中の OT1/cmr/m/n は
\DeclareFontShape{OT1}{cmr}{m}{n}{
<-6> cmr5
<6-7> cmr6
<7-8> cmr7
<8-9> cmr8
<9-10> cmr9
<10-12> cmr10
<12-17> cmr12
<17-> cmr17
}{}
であるので,

7.9ptのときは cmr7.tfm at 7.9pt で,このときの W の幅が 9.09131pt
8.0ptのときは cmr8.tfm at 8.0pt で,このときの W の幅が 8.7279pt

ということで,そもそも使われているtfmが違っていて(結果,実際のフォントも違っていて),
しかも cmr に限らずcomputer modernのフォントは
サイズが小さくなるほど扁平になるようなデザインになっています
(古のビットマップの時代,小さいサイズのフォントは扁平(かつ太目)でないと
印刷したときに見えにくかった(実際はそうしないと判読できないくらいのケースもあったはず)という事情があります.
現在の印刷の主流のCTPってそれ以前のフィルムや印画紙に比べてものすごくクリアなんですよね).

ということでちょうどその切り替えの部分でそういうギャップが起きます.

私はtype1cmを使うのではなく,type1cmと同様にfdファイルに相当する部分を書き換えて
\DeclareFontShape{OT1}{cmr}{m}{n}{
<-5.5> cmr5
<5.5-6.5> cmr6
<6.5-7.5> cmr7
<7.5-8.5> cmr8
<8.5-9.5> cmr9
<9.5-11.5> cmr10
<11.5-16.5> cmr12
<16.5-> cmr17
}{}
と四捨五入っぽく割り当てることが多いです
(実際はptではなく級数を使うことが多いですが,問題があっても大概は許容範囲で収まります).
latin modernのfdファイル群もこの四捨五入型です.

状況によっては
\DeclareFontShape{OT1}{cmr}{m}{n}{
<-> cmr10
}{}
に相当するような粗っぽいこともします(^-^;
本田 知亮 への返信

Re: type1cm 使用時に \fontsize の指定に対し欧文の文字サイズが単調増加にならない

- tipo ling の投稿

あー,なるほど! 鼻から熱い息が漏れるほど納得しました。 ありがとうございました。

Computer Modern がオプティカルスケーリングでデザインされていること,とくに,垂直方向のパラメーター(x-height など)だけでなく水平方向(a-z length)も変えていることをすっかり忘れていました。

10 pt まで 1 pt 刻みでしかデザインが違っていないものを任意のサイズで使おうとしたらこうならざるをえないわけですね。

type1cm を使う場合も使わない場合も,和欧混植の版面設計は文字サイズだけでくたくたになりそうということが分かりました。

tipo ling への返信

Re: type1cm 使用時に \fontsize の指定に対し欧文の文字サイズが単調増加にならない

- ut の投稿
# 昨日、私なりに下掲のような回答を書きまして、投稿しようとし
# ましたら、ちょうど本田さんがご回答なさった直後でしたので、
# ひとまず投稿をやめたのですけれど、やっぱり投稿してしまいます。

# 本田さんのご回答で既に質問者の方はご納得済みでらっしゃいま
# すので、独り言みたいなものを投稿してしまい、堪え性がなくて
# 申し訳ありません。


----- 素朴な疑問 -----

type1cm パッケージは、OT1 の Computer Modern を type1 フォン
トで利用する際に、元々ピッマップフォント利用の際に設けていた
利用可能サイズ固定の制約を取り払うためのものだと思います。

そのため、OT1 の Computer Modern を使わなければならないという
のでなければ、type1cm を使う必要性もなさそうな気がします。

また、OT1 の Computer Modern を使わなければならないとしても、
文書中で、\fontsize を使って直接フォントサイズをいろいろと
指定しているのでなければ(\small とか \large とかしか使って
なければ)、任意のサイズ指定を考慮する必要もなさそうに思えます。

(尤も、実際に直面なさっているご事情は全く分かりませんので、
飽くまで外野の独り言です)


----- 昨日書いていた回答 -----

type1cm.sty では、

\DeclareFontShape{OT1}{cmr}{m}{n}{
        <-6>    cmr5
        <6-7>  cmr6
        <7-8>  cmr7
        <8-9>  cmr8
        <9-10>  cmr9
        <10-12> cmr10
        <12-17> cmr12
        <17->  cmr17
      }{}

と設定されていますので、

        <7-8>  cmr7 % 7pt 以上、8pt 未満 は、cmr7.tfm  <-- 7.9pt はこれ
        <8-9>  cmr8 % 8pt 以上、9pt 未満 は、cmr8.tfm <-- 8pt、8.9pt はこれ
        <9-10>  cmr9 % 9pt 以上、10pt 未満 は、cmr9.tfm <-- 9pt はこれ

ということになります。

cmr7.tfm、cmr8.tfm、cmr9.tfm の W の幅の設定を見てみますと、

  ----------------------------------------
  cmr7.pl
    (DESIGNSIZE R 7.0)
    
    (CHARACTER C W
      (CHARWD R 1.150801)
  ----------------------------------------
  cmr8.pl
    (DESIGNSIZE R 8.0)
    
    (CHARACTER C W
      (CHARWD R 1.090988)
  ----------------------------------------
  cmr9.pl
    (DESIGNSIZE R 9.0)
    
    (CHARACTER C W
      (CHARWD R 1.056166)
  ----------------------------------------

ですので、7.9pt、8.0pt、8.9pt、9.0pt の W の幅は(概算)、

  ・ 7.9pt の W の幅: 7.0 * 1.150801 * (7.9/7.0) = 9.0913279
  ・ 8.0pt の W の幅: 8.0 * 1.090988 = 8.727904
  ・ 8.9pt の W の幅: 8.0 * 1.090988 * (8.9/8.0) = 9.7097932
  ・ 9.0pt の W の幅: 9.0 * 1.056166 = 9.505494

ということになります。
ut への返信

Re: type1cm 使用時に \fontsize の指定に対し欧文の文字サイズが単調増加にならない

- tipo ling の投稿

ありがとうございます。

こちらも参考になりました!

公開できる範囲で背景(言い訳?)や経緯を書きますと

  • 完成が近い浩瀚な書籍をお手伝いすることに
  • クラスファイル,スタイルファイル類は別の書籍のためにかなり昔に作られたもの
  • レイアウトを調整する必要が出てきた(なお,本文中で \fontsizeを使ったりはしない)
  • 今からスタイルファイル類に大きく手を入れるのは避けたい
  • 欧文フォントはママ(Computer Modern)で(→というか何も考えてなかった)
  • レイアウトは,諸条件を満たすためフォントサイズも微妙な値になりそう
  • あっ,半端なサイズって指定できないんだった……
  • なんか方法あるのでは?
  • type1cm を使えばいいらしい
  • 組んでみる →なんじゃあこりゃぁぁ!

みたいな感じでした。

tipo ling への返信

Re: type1cm 使用時に \fontsize の指定に対し欧文の文字サイズが単調増加にならない

- ut の投稿
私の「独り言」に対して、背景や経緯をご説明くださり、ありがと
うございます。そういうことでしたか。

このフォーラムでこんなことを申し上げても詮無いことですが、

> ・ 完成が近い浩瀚な書籍をお手伝いすることに

とのお話し、ご苦労のほど、わかりみが深すぎます…。

私は文系なので、TeX 組みの原稿の話ではありませんが、これまで
に何人かの大先生(いずれもご高齢の)のご出版のお手伝いをした
経験がありますが、どれも本当に大変でした。

編集の最終段階に至ってまで、これらの老先生方は「気が変わった」
とおっしゃって電話一本で体裁の変更をご指示して来られるのです
が、こちらとしては、「いやいや、この期に及んでそんな変更だな
んて、現場や出版社(や私)の作業量が大変なことになります!」
と申し上げても、まったく意に介されませんでした。

学術出版の特殊性(?)とか、「昔はこれくらい普通だった」とい
うご感覚のせいだとか、理由はいろいろと考えられるものの、実際
に作業に当たる側にとっては、何のなぐさめにもなりません…。


一応少しは TeX 関連の話を:

OT1 の Computer Modern でなくてもいいなら、T1 の Latin Modern
にするのが一番簡単な気がしますけれど、フォントを変更するとなる
と、改行位置や改ページ位置がズレる可能性が高いので、これはこれ
でちょっと怖いですよね…。

あと、本田さんが、

> 状況によっては
> \DeclareFontShape{OT1}{cmr}{m}{n}{
> <-> cmr10
> }{}
> に相当するような粗っぽいこともします(^-^;

とおっしゃっていますが、私も、自分用の欧文フォントの設定なら、

 \DeclareFontShape{T1}{myfont}{m}{n}{<-> [0.95] myfont-regular}{}

みたいな感じで適当に済ませてしまうことが多いです(オプティカ
ルなサイズで分けてリリースされている高級な欧文フォントでない
限り)。

ただ、編集の最終段階で欧文フォントを変更するなんて無理な話で
しょうし、それと、そもそも普段は LuaTeX をお使いなのかも知れ
ませんから、こういう、tfm を作って、\DeclareFontShape を書い
て…、という昔ながらの設定をご存じなかったかも知れません(既
存のフォントパッケージが存在するなら、こんな設定を自分でする
必要もありませんし)。

以上、つい余計な無駄話を重ねてしまいました。失礼しました。