diff options
author | Karl Berry <karl@freefriends.org> | 2020-03-21 21:18:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-03-21 21:18:15 +0000 |
commit | 2836126906a8ae46781df9e08c9eabb75228bd83 (patch) | |
tree | 3c931d65c27c25f5d0b4ae7fe0f80055ac58f962 /Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex | |
parent | da88d6a955687f433382b1d3072ef1ac42fc5fc1 (diff) |
ptex-manual (21mar20)
git-svn-id: svn://tug.org/texlive/trunk@54450 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex')
-rw-r--r-- | Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex | 257 |
1 files changed, 212 insertions, 45 deletions
diff --git a/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex b/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex index 128ba4399ac..4aef0812e70 100644 --- a/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex +++ b/Master/texmf-dist/doc/ptex/ptex-manual/jfm.tex @@ -16,6 +16,7 @@ % logos \def\pTeX{p\kern-.10em\TeX}\def\upTeX{u\pTeX} +\def\OMEGA{$\Omega$} \title{\emph{JFMファイルフォーマット}} \author{ASCII Corporation \& Japanese \TeX\ Development Community} @@ -36,7 +37,10 @@ JFMフォーマットの仕様は全く同じであり,ただ JISコードを用いる(\pTeX の場合)か, UCS-4の下位3バイトを用いる(\upTeX の場合)かだけが異なる. -\section{JFMファイルの構成} +\tableofcontents +\clearpage + +\section{JFMファイルの構成}\label{jfm-format} JFMファイルのフォーマットは, 基本的にはTFMファイルのフォーマットに準拠しており, @@ -92,20 +96,10 @@ JFMファイルでもTFMファイルと同じく,拡張子は\code{.tfm}が用 このテーブルの各エントリーは1ワード(=4バイト)で構成され, 上位3バイトに文字コード(符合位置),下位1バイトに文字タイプを持つ -\footnote{これが日本語\TeX{}開発コミュニティによって2018年1月に導入された -新仕様である;オリジナルのアスキーによる仕様では,「上位半ワードに -文字コード,下位半ワードに文字タイプを持つ」というものであった. -\pTeX{}では内部処理にJISが用いられ,JFMで扱う文字コードは2バイトが -上限だったため十分であったが,\upTeX{}でBMP超えの3バイトの文字を -JFMで扱うことを目的に仕様拡張した.}. +\footnote{日本語\TeX{}開発コミュニティによる新仕様; +詳細は第\ref{jfm-new}節を参照.}. 文字コードは,それが16進数24bit(3バイト)で\code{0xABcdef}と表されるとき, -\node{char\_type}テーブルには\code{cd ef AB}として格納される -\footnote{オリジナルの仕様では,下位半ワードに文字タイプを -格納していたが,文字タイプの上限は255なので,実はその上位バイトは -常に\code{00}であった.このことを利用し,日本語\TeX{}開発コミュニティの -新仕様では「この\code{00}が実は文字コードの上位だった」ということに -して,3バイト(U+10000以上)の文字コードで不足する1バイトを確保した. -これにより,新仕様はオリジナルの仕様の上位互換であることが保証されている.}. +\node{char\_type}テーブルには\code{cd ef AB}として格納される. テーブル内にはコードの値の順番に収められていなければならない. またこのテーブルの先頭には,デフォルトのインデックスとして 文字コード及び文字タイプの項が0のものが, @@ -162,11 +156,8 @@ JFMでは$\size{bc}$は必ずゼロ\footnote{前節にある通り,文字コ である場合は,実際の\node{glue\_kern}プログラムが \node{glue\_kern}[$256\times\size{op\_byte}+\size{remainder}$]から 収められている(すなわち,再配置されている)ことを示す - \footnote{「再配置」は,サイズが256を超える大きな - \node{glue\_kern}テーブルを格納するための方策であり, - 欧文TFMの\node{lig\_kern}テーブルにおけるそれと同様である. - 2018年2月に日本語\TeX{}開発コミュニティによって, - \pTeX{}及びpPLtoTFで新たにサポートされた.}. + \footnote{日本語\TeX{}開発コミュニティによって新たにサポート; + 詳細は第\ref{jfm-new}節を参照.}. 最初のワードでない場合(すなわち,既に再配置先あるいは プログラムのステップを開始した後のワードである場合)は, その場でプログラムを終了する. @@ -175,13 +166,8 @@ JFMでは$\size{bc}$は必ずゼロ\footnote{前節にある通り,文字コ \item 128より小さいとき\\ このワードを実行した後,次のステップまでスキップする ワード数を示す - \footnote{「スキップ」(SKIP)は,元々アスキーの公式ページ - \texttt{http://ascii.asciimw.jp/pb/ptex/tfm/jfm.html}に文書化 - されてはいたが,実際には(p)PLtoTFの\node{glue\_kern}テーブル内で - SKIP命令を使用することができず,\pTeX{}もやはりSKIP命令を - サポートしていなかった. - 2018年2月の日本語\TeX{}開発コミュニティの改修により, - 新たにサポートが開始された.}. + \footnote{日本語\TeX{}開発コミュニティによって新たにサポート; + 詳細は第\ref{jfm-new}節を参照.}. \end{itemize} \item[第2バイト] (\node{char\_type}) \begin{itemize} @@ -238,6 +224,67 @@ JFMでは$\size{bc}$は必ずゼロ\footnote{前節にある通り,文字コ % 上下位置補正に \fontdimen5 の値が用いられるらしい.他には? \end{dangerous} +\subsection{日本語\TeX{}開発コミュニティによる新仕様}\label{jfm-new} +長らくJFMフォーマットは株式会社アスキーが開発した当初仕様のままであったが, +2018年1月から2月にかけ,日本語\TeX{}開発コミュニティは下記の3点につき +JFMフォーマットの仕様を拡張した. +\begin{enumerate} + \item \node{char\_type}テーブルへの3バイトの文字コード格納 + \item \node{glue\_kern}テーブルでのスキップ(SKIP)コマンド使用 + \item \node{glue\_kern}テーブルでの再配置(rearrangement) +\end{enumerate} +和文JFMでこれらの拡張機能が使われている場合は\pTeX~p3.8.0以上が必要である. + +\subsubsection{\node{char\_type}テーブルへの3バイトの文字コード格納} +\node{char\_type}テーブルの各エントリーは1ワード(=4バイト)で +構成されるが,オリジナルの仕様では +\begin{itemize} + \item 上位半ワードに文字コード(符合位置),下位半ワードに文字タイプを持つ +\end{itemize} +であった. +\pTeX{}では内部処理にJISが用いられ,JFMで扱う文字コードは2バイトが +上限だったため十分であったが,\upTeX{}でBMP超えの3バイトの文字を +JFMで扱うことができなかった.また,オリジナルの仕様では文字タイプ用に +下位半ワードが確保されている一方で,文字タイプの上限は255なので +実はその上位バイトは常に\code{00}であり,勿体なかった. + +そこで,日本語\TeX{}開発コミュニティの新仕様(2018年1月)では +\begin{itemize} + \item 上位3バイトに文字コード(符合位置),下位1バイトに文字タイプを持つ + \item 文字コードは,それが16進数24bit(3バイト)で\code{0xABcdef}と + 表されるとき,テーブルには\code{cd ef AB}として格納される +\end{itemize} +とした.オリジナルの仕様で常に\code{00}だったバイトが +「実は文字コードの上位だった」と解釈することにして, +3バイト(U+10000以上)の文字コードで不足する1バイトを確保したのである. +これにより,新仕様はオリジナルの仕様の上位互換であることが保証されている. + +\subsubsection{\node{glue\_kern}テーブルでのスキップ(SKIP)コマンド使用} +「スキップ」(\code{SKIP})は,元々アスキーの公式ページ +\footnote{\texttt{https://asciidwango.github.io/ptex/tfm/jfm.html}} +% 旧: http://ascii.asciimw.jp/pb/ptex/tfm/jfm.html +に文書化されてはいたが,実際には(p)PLtoTFは\code{GLUEKERN}プロパティ内で +\code{SKIP}命令を受け付けず,\pTeX{}もやはりJFMの\code{SKIP}命令を +サポートしていなかった.2018年2月の日本語\TeX{}開発コミュニティの改修により, +新たにサポートが開始された. + +\subsubsection{\node{glue\_kern}テーブルでの再配置(rearrangement)} +「再配置」は,サイズが256を超える大きな\node{glue\_kern}テーブルを +格納するための方策であり,欧文TFMの\node{lig\_kern}テーブルにおける +それと同様である.2018年2月に日本語\TeX{}開発コミュニティによって, +\pTeX{}及びpPLtoTFで新たにサポートされた. + + +\section{JPLファイル}\label{jpl-format} + +TFMはバイナリ形式であるが,これをプロパティ(特性)という概念を使って +テキスト形式で視覚化したものがPL (Property List)ファイルである. +同様に,JFMをテキスト形式で視覚化したものが +\emph{JPL (Japanese Property List)}ファイルである. +JPLファイルでもPLファイルと同じく,拡張子は\code{.pl}が用いられる. + + +% -- tables begin \DeleteShortVerb{|} \begin{table}[tbp]\small \caption{JFMファイルの構成\label{構成}} @@ -307,31 +354,151 @@ $\size{ng}$ & $\size{np}$ \\ \hline \end{minipage} \end{table} \MakeShortVerb*{|} +% -- tables end +\clearpage -\section{JPLファイル} - -TFMはバイナリ形式であるが,これをプロパティ(特性)という概念を使って -テキスト形式で視覚化したものがPL (Property List)ファイルである. -同様に,JFMをテキスト形式で視覚化したものが -\emph{JPL (Japanese Property List)}ファイルである. -JPLファイルでもPLファイルと同じく,拡張子は\code{.pl}が用いられる. - - -\section{JFMを扱うプログラム} +\section{JFMを扱うプログラム}\label{jfm-program} \pTeX と\upTeX ,あるいはそれらが生成したDVIを扱うプログラムが JFMを扱うのは当然であるが,ここではJFMおよび関連するフォントフォーマットを 扱うことに特化したプログラムの主なものを挙げる. -%\subsection{pPLtoTF, upPLtoTF} - -%\subsection{pTFtoPL, upTFtoPL} - -%\subsection{chkdvifont} - -%\subsection{jfmutil} - -%\subsection{makejvf} +\subsection{pPLtoTF, upPLtoTF} + +テキスト形式のJPLファイルをバイナリ形式のJFMファイルに変換する.いずれも +欧文\TeX 用の\code{pltotf}の上位互換であり,入力ファイルが欧文用のPLファイルで +あれば欧文用のTFMを生成し,和文用のJPLファイルであれば和文用のJFMを生成する. + +\code{ppltotf}と\code{uppltotf}の違いは,エンコーディングである. +\begin{itemize} + \item \code{ppltotf}: 常に\textbf{JIS}コードでエンコードされたJFMを生成するため, + \pTeX 用のJFM生成には多くの場合\code{ppltotf}コマンドが用いられる. + \item \code{uppltotf}: デフォルトでは\textbf{Unicode}(UCS-4の下位3バイト)で + エンコードされたJFMを生成するため,主に\upTeX 用のJFM生成に用いられる. +\end{itemize} + +\code{ppltotf}においては,\code{-kanji}オプションで +入力JPLファイルの文字コードを指定できる +(有効な値は\code{euc}, \code{jis}, \code{sjis}, \code{utf8}). +\code{uppltotf}でも\code{-kanji}オプションが同じく使えるが, +同時にJFMのエンコードもJISになる(従って\code{ppltotf}と同じ挙動を示す)ことに注意 +\footnote{\code{uppltotf}における規定値は\code{uptex}であり, +この場合はJFMがUnicodeでエンコードされる.}. + +\subsection{pTFtoPL, upTFtoPL} + +バイナリ形式のJFMファイルをテキスト形式のJPLファイルに変換する.いずれも +欧文\TeX 用の\code{tftopl}の上位互換であり,入力ファイルが欧文用のTFMであれば +欧文用のPLファイルを生成し,和文用のJFMであれば和文用のJPLファイルを生成する. + +\code{ptftopl}と\code{uptftopl}の違いは,やはりエンコーディングである. +\begin{itemize} + \item \code{ptftopl}: 入力JFMファイルを常に\textbf{JIS}コードで解釈するため, + \pTeX 用のJFMデコードには多くの場合\code{ptftopl}コマンドが用いられる. + \item \code{uptftopl}: 入力JFMファイルをデフォルトでは\textbf{Unicode}で解釈するため, + 主に\upTeX 用のJFMデコードに用いられる. +\end{itemize} + +\code{ptftopl}においては,\code{-kanji}オプションで +出力JPLファイルの文字コードを指定できる +(有効な値は\code{euc}, \code{jis}, \code{sjis}, \code{utf8}). +\code{uptftopl}でも\code{-kanji}オプションが同じく使えるが, +同時にJFMもJISコードで解釈される(従って\code{ptftopl}と同じ挙動を示す)ことに注意 +\footnote{\code{uptftopl}における規定値は\code{uptex}であり, +この場合はJFMがUnicodeで解釈される.}. + +\subsection{chkdvifont} + +\TeX\ Live 2019で追加された比較的新しいコマンドであり, +TFM/JFMファイルの簡単な情報を表示する機能を持つ(\OMEGA 用のOFMファイルにも対応). + +実行例を示す(注意:ファイル名の拡張子は省略不可.また,ファイルが +現在のディレクトリにない場合は,フルパスの指定が必要). + +\paragraph{欧文TFMの場合} +\begin{verbatim} +$ chkdvifont cmr10.tfm + "cmr10" is a tfm file : 0 -> 127 + checksum = 4BF16079 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} +一行目の表示から, +欧文TFMであることと$\size{bc}=0$,$\size{ec}=127$であることが読み取れる. + +\paragraph{和文横組用JFMの場合} +\begin{verbatim} +$ chkdvifont jis.tfm + "jis" is a jfm file : 0 -> 5 + checksum = 00000000 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} +和文(横組用)JFMであることと$\size{bc}=0$,$\size{ec}=5$であることが読み取れる. + +\paragraph{和文縦組用JFMの場合} +\begin{verbatim} +$ chkdvifont upjisr-v.tfm + "upjisr-v" is a jfm(tate) file : 0 -> 5 + checksum = 00000000 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} +和文縦組用JFMであることと$\size{bc}=0$,$\size{ec}=5$であることが読み取れる +\footnote{\code{upjisr-v.tfm}は\upTeX 用JFMであるが, +原理的に\pTeX 用と\upTeX 用のJFMは区別できない.}. + +\paragraph{和文JFMの拡張機能が使われている場合} +第\ref{jfm-new}節で述べたとおり,日本語\TeX 開発コミュニティによって +下記の3点につきJFMフォーマットの仕様が拡張されている. +\begin{enumerate} + \item \node{char\_type}テーブルへの3バイトの文字コード格納 + \item \node{glue\_kern}テーブルでのスキップ(SKIP)コマンド使用 + \item \node{glue\_kern}テーブルでの再配置(rearrangement) +\end{enumerate} +和文JFMでこれらの拡張機能が使われている場合は\pTeX~p3.8.0以上が必要であるが, +この情報も表示される(下の例は再配置あり): +\begin{verbatim} +$ chkdvifont upphiraminw3-h.tfm + "upphiraminw3-h" is a jfm file : 0 -> 146 + New features in pTeX p3.8.0 / JFM 2.0: + + rearrangement in glue_kern + checksum = 00000000 + design size = 10485760 2^{-20} points = 10 points +\end{verbatim} + +\subsection{makejvf} + +JFMファイルを基にして,VF (virtual font)を生成するプログラムである. +\code{makejvf}が生成する和文VFの目的は以下のとおりである: +\begin{itemize} + \item \pTeX や\upTeX で使われる多くのJFMでは,約物類(かっこ,句読点など)の文字幅を + 半角幅として定義し,見た目の空白をグルーやカーンの挿入によって実現している. + 例えば``(''のような左に空きがある括弧類は,左半分は文字の一部として扱わず, + 「グルーによる半角分の右シフト」と「半角幅の\inhibitglue (」として扱っている. + \item 一方,DVIからPostScriptやPDFへ変換時に使われる実際のフォントでは, + 約物類も全角幅でデザインされている.そのため,DVIに配置された + ``(''を実際のフォントの``(''に安直に置き換えると,想定よりも右にずれた + 位置に出力されてしまう. + \item この位置ずれを補正するため,欧文フォントの合成や置換に実用されている + VF(仮想フォント)という仕組みを和文フォントにも応用する. + 例えばVF中に「``(''は左に半角分ずらして置き換える」という記述を追加することで, + DVIドライバがそれを解釈して位置補正できるようにする. +\end{itemize} +詳細はマニュアル|makejvf.1|(英語版)を参照してほしい. + +\subsection{jfmutil} + +JFMおよび和文VFを操作する種々の機能を提供するPerlスクリプトである. +主な機能は以下のとおり: +\begin{itemize} + \item 和文の仮想フォント(VFとJFMの組)に対応する独自仕様の + テキスト形式(ZVP形式)と,仮想フォントとの間の相互変換. + 欧文の仮想フォント(VFとTFMの組)とテキスト形式(VPL形式)との間を + 相互変換する|vftovp|/|vptovf|の和文版に相当する. + \item 和文・欧文問わず,VFそれ単独に対応する独自仕様の + テキスト形式(ZVP0形式;ZVP形式のサブセット)と,VFとの間の相互変換. + \item 和文の仮想フォント(VFとJFMの組)を別の名前で複製する機能. + VF中に記録された参照先のJFM名も適切に変更される.多書体化などに有用. +\end{itemize} +詳細は公式ドキュメントを参照してほしい. \end{document} |