Postscript10ptで40字ベタ組をしたい

Postscript10ptで40字ベタ組をしたい

- クリバ (CHRIBUR_) の投稿
返信数: 2
初めまして。クリバと申します。
当方、普段はWindows 10上でTeX Live 2018を用いてupLaTeXでのレポート書きに勤しんでおります。

今回はレポートではないのですが、和文組版に興味がありまして、以下の仕様で組むことにチャレンジしております。
文字サイズ:Postscript10pt(LaTeX10ptではない)、フォント:源ノ明朝、1行の文字数:40、行送り:Postscript17pt、行数:34、ヘッダやフッタ:無し、版面位置:天地左右中央
これを想定して書いたLaTeXコードが以下の通りです。
\documentclass[uplatex,a4j,10pt,dvipdfmx,jis2004]{jsarticle}
%
\usepackage[nomessages]{fp}%色々な長さを計算する為の固定小数点パッケージ
\usepackage[expert,deluxe]{otf}
\usepackage[unicode,sourcehan,noalphabet,everypage]{pxchfon}
%\Cjascale = 0.924690
\FPadd{\ratiovaluepartone}{\Cjascale}{0.0}%0.92469
\FPdiv{\ratiovalueparttwo}{1.0}{\ratiovaluepartone}%0.92469の逆数
\FPdiv{\ratiovaluepartthree}{72.270}{72.0}%LaTeX10ptからPostscript10ptへの変換
\FPmul{\ratiovaluepartfour}{\ratiovalueparttwo}{\ratiovaluepartthree}%Postscript1ptの長さ
\FPmul{\threeratiovalue}{\ratiovaluepartfour}{3.0}%Postscript3ptの長さ
\FPmul{\fourratiovalue}{\ratiovaluepartfour}{4.0}%Postscript4ptの長さ
\FPmul{\nineratiovalue}{\ratiovaluepartfour}{9.0}%Postscript9ptの長さ
\FPmul{\tenratiovalue}{\ratiovaluepartfour}{10.0}%Postscript10ptの長さ
\FPmul{\elevenratiovalue}{\ratiovaluepartfour}{11.0}%Postscript11ptの長さ
\FPmul{\remaketextwidth}{\tenratiovalue}{40.0}%Postscript400ptの長さ、1行の文字数
\FPmul{\remaketextheight}{\tenratiovalue}{57.60}%Postscript576ptの長さ、版面の高さ
\FPmul{\remaketopskip}{\tenratiovalue}{1.50}%Postscript15ptの長さ
\FPadd{\remakezwidth}{\tenratiovalue}{0.0}%Postscript10ptの長さ、1文字の横幅
\FPmul{\remakebaselineskip}{\tenratiovalue}{1.70}%Postscript17ptの長さ、行送り
\FPmul{\remakenarrowbaselineskip}{\tenratiovalue}{1.20}%Postscript12ptの長さ、narrow下での行送り
\usepackage[paperwidth=210truemm,paperheight=297truemm,textwidth=\remaketextwidth truept,textheight=\remaketextheight truept,headheight=0truept,headsep=0truept,footskip=0truept,marginparsep=0truept,marginparwidth=0truept,centering,truedimen]{geometry}
\makeatletter
\renewcommand{\normalsize}{%
\ifnarrowbaselines
\jsc@setfontsize{\normalsize}{\remakezwidth}{\remakenarrowbaselineskip}%文字サイズ:Postscript10pt、行送り:Postscript12pt
\else
\jsc@setfontsize{\normalsize}{\remakezwidth}{\remakebaselineskip}%%文字サイズ:Postscript10pt、行送り:Postscript17pt
\fi
\abovedisplayskip \elevenratiovalue truept plus\threeratiovalue truept minus\fourratiovalue truept
\abovedisplayshortskip 0truept plus\threeratiovalue truept minus 0truept
\belowdisplayskip \nineratiovalue truept plus\threeratiovalue truept minus\fourratiovalue truept
\belowdisplayshortskip \nineratiovalue truept plus\threeratiovalue truept minus\fourratiovalue truept
\let\@listi\@listI
}
\makeatother
\setlength{\topskip}{\remaketopskip truept}
\setlength{\parindent}{\remakezwidth truept}
\setlength{\linewidth}{\remaketextwidth truept}
\setlength{\kanjiskip}{0truept}
\setlength{\xkanjiskip}{0truept}
\setlength{\parskip}{0truept}
\setlength{\marginparpush}{0truept}
\title{あああああああああああああああ}
\author{あああああああああああああああ}
\date{\today}
\begin{document}
\maketitle
\normalsize
あああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ
\end{document}

実際に組むと、1行の文字数が43、行数が34になります。layoutパッケージを挿して見たら\textwidth=434pt、\textheight=625ptになっている様です。上で書いた想定上の設計になっておりませんが、原因が分かりません。皆様のお力添えをいただければ幸いです。

よろしくお願いいたします。
クリバ (CHRIBUR_) への返信

Re: Postscript10ptで40字ベタ組をしたい

- 帯田 木偶太 の投稿
ご提示のソースを理解しきれないでいるので発言は控えていようと思って
いましたが、他にコメントがつかないようなので出しゃばらせていただきます。

Postscript ポイントというのは、TeX の bp(ビッグポイント、72 分の 1 インチ)と
基本的に同じものだと思っているのですが、違っていたでしょうか?
もしそうなら、単に「10bp」で Postscirpt の 10 ポイントを表現できると
思うのですが…? 違うものだったとしても固定された長さでしょうから
TeX に計算させなくても、ソース外で(電卓でも使って)単位換算してから
ハード・コーディングしてしまえば、もっと読みやすいソースになると思いますよ。

ひょっとして fp パッケージの計算精度の高さに期待して、
あえてソース中で計算するようになさったのかもしれませんが、
最終的には長さを保持する変数(パラメーターまたはレジスター)に
代入しなければならないわけで、その代入の際には TeX は必ず
sp(スケールド・ポイント)単位に丸めちゃいますから、
無駄だと思いますよ。
帯田 木偶太 への返信

Re: Postscript10ptで40字ベタ組をしたい

- クリバ (CHRIBUR_) の投稿
TeXのbpにつきましては存在は認知しておりますが、まだ試しておりません。と言いますのも、documentclassのオプションで10pt以外を指定したら、他の長さにtrueを接頭辞しないと変動するなどの情報を散見いたしまして手を出せないでいたのですが、冷静に考えれば用紙サイズだけをtruemmで固めて相似拡大した方が楽かもしれません。
長さにfpの高精度小数を代入しても丸められてしまうのは知りませんでした。fpパッケージ自体の計算速度もそれ程高くない様ですし、結構不毛なことをしていたんですね。

明日になってしまいますが、bpで試してみます。