Scribus での pt と mm の関係
Scribus での pt と mm の関係が気になったので調べてみた。
フォントのサイズ指定には pt しか使用できない
- 最近の商業レイアウトソフトでは、フォントのサイズ指定で「級(Q)」が使用できる
- なので、デザイン作業においてフォントサイズは Q で指定する場合が多い
- しかし、Scribus では pt でしか使用できない
- でも、フォントサイズ入力欄に単位つきで入力できる (例)3.25mm
- だが、単位つきで入力した場合でも結局 pt に変換されてしまう。(しかも、小数点第一位以下は切り捨てられる)
- 2.75mm (11Q) と入力すると、7.8pt になる。
ptに変換されてしまっているためか、文字サイズ13Q一行35文字詰めのテキストフレームをつくろうとしてテキストフレームの横幅を 2.75mm * 35 = 96.25mm に指定しても、34文字しか入らない事態に陥る。
どういう計算式なんだ?
ということで、ソースを調べてみました。
scribus-1.3.3.12/scribus/units.cpp より抜粋。
/*! * @brief Returns the ratio to points for the selected unit of measure. Ratios are for: PT, MM, IN, P, CM, C */ const double unitGetRatioFromIndex(const int index) { //PT, MM, IN, P, CM, C (Cicero) //NOTE: Calling functions that divide by this value will crash on divide by 0. They shouldnt be getting // a zero value if they are accessing here with a correct index. if (index<UNITMIN || index>UNITMAX) return 0; double ratio[] = { 1.0, 25.4/72.0, 1.0/72.0, 1.0/12.0, 2.54/72.0, 25.4/72.0/4.512 }; return ratio[index]; } /*! * @brief Returns the mm value from the pt value supplied */ const double pts2mm(double pts) { return pts * unitGetRatioFromIndex(SC_MM); } /*! * @brief Returns the pts value from the mm value supplied */ const double mm2pts(double mm) { return mm / unitGetRatioFromIndex(SC_MM); }
ようするに、mm から pt に変換する際に、 mm / (25.4/72.0)
とやってるみたい。
フォントのサイズ指定は pt でやるのが吉
いろいろためしてみた結論としては、以下のようにやるといいということになった。
- フォントのサイズは pt で指定する (例) 8pt
- 任意の文字詰数におけるテキストフレームの幅を mm で指定したい場合は、まず
フォントのポイント数 * (25.4/72.0) * 文字詰数
という式を使用して mm に変換する (例) 8 * (25.4/72.0) * 35 = 98.7777778 - 変換結果の数字を小数点第3位で四捨五入する (例) 98.778
- 四捨五入した数値をテキストフレームの横幅として指定してあげると、ちゃんと文字数ぴったりでおさまる