% 文字コードは UTF-8
% uplatex で組版する
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{color}
\definecolor{myblue}{rgb}{0,0,0.75}
\definecolor{mygreen}{rgb}{0,0.45,0}
\usepackage[colorlinks,hyperfootnotes=false]{hyperref}
\usepackage{pxjahyper}
\hypersetup{linkcolor=myblue,urlcolor=mygreen}
\usepackage{bxtexlogo}
\bxtexlogoimport{*}
\usepackage{shortvrb}
\MakeShortVerb{\|}
\newcommand{\PkgVersion}{0.3a}
\newcommand{\PkgDate}{2025/09/15}
\newcommand{\Pkg}[1]{\textsf{#1}}
\newcommand{\Meta}[1]{$\langle$\mbox{}#1\mbox{}$\rangle$}
\newcommand{\Note}{\par\noindent ※}
\newcommand{\Means}{：\ }
\newcommand{\Strong}[1]{\textbf{#1}}
%-----------------------------------------------------------
\begin{document}
\title{\Pkg{pxjodel} パッケージ}
\author{八登崇之\ （Takayuki YATO; aka.~``ZR''）}
\date{v\PkgVersion\quad[\PkgDate]}
\maketitle

\begin{abstract}
本パッケージは、
カスタムのメトリックをもつ和文フォントを
\Pkg{japanese-otf}パッケージの多書体設定に拡張する作業を
支援する機能を提供する。
\end{abstract}

%\tableofcontents

%===========================================================
\section{前提環境}
\label{sec:Requirement}

\begin{itemize}
\item {\TeX}フォーマット\Means {\LaTeX}
\item {\TeX}エンジン\Means {\pTeX}／{\upTeX}（派生も含む）
\item DVIウェア\Means 和文TFMとVFをサポートするもの
\item 前提パッケージ\Means
  \begin{itemize}
  \item \Pkg{japanese-otf}パッケージ
  \item \Pkg{ifptex}パッケージ
  \item \Pkg{xkeyval}パッケージ
  \end{itemize}
\end{itemize}

%===========================================================
\section{何をするのか}
\label{sec:Basic}

\Pkg{japanese-otf}の和文フォント設定に対して
「直接入力に対するTFMを特定の接頭辞を付けた名前のものに変更する」
という変更を加える。
例えば、ユーザが指定した接頭辞が|foo|である場合、
|nmlminr-h|というTFMは|foo--nmlminr-h|に置き換えられる。

%===========================================================
\section{何がしたいのか}
\label{sec:Objective}

{\pLaTeX}の文書作成において、カスタムのメトリックをもった独自の
和文VFを用いていたとする。

\begin{itemize}
\item 横組・明朝体（|JY1/mc/m/n|）： |hogemc-h|
\item 縦組・明朝体（|JT1/mc/m/n|）： |hogemc-v|
\item 横組・ゴシック体（|JY1/gt/m/n|）： |hogegt-h|
\item 縦組・ゴシック体（|JT1/gt/m/n|）： |hogegt-v|
\end{itemize}

\Note これらのVFは{\pTeX}の原メトリックTFM（|rml|／|gbm|）を
参照しているものとする。

ここで、以下のような理由で\Pkg{japanese-otf}パッケージを
使いたくなったとする。
\begin{enumerate}
\item 今の設定は単ウェイトであるが、多ウェイトの和文フォントの
設定（太明朝など）を使いたい。\label{itm:mw}
\item \Pkg{japanese-otf}パッケージのもつ豊富な文字入力機能
（|\CID|や|\ajMaru|など）を使いたい。\label{itm:ajm}
\end{enumerate}
しかし、単純に\Pkg{japanese-otf}パッケージを読みこんだのでは、
和文VFが\Pkg{japanese-otf}のものに置き換わっってしまうため、
カスタムのメトリックが維持されない。
どうすればいいだろうか。

\medskip

もし\Pkg{japanese-otf}を使う目的が\ref{itm:ajm}だけであるなら、
\Pkg{japanese-otf}の|noreplace|を使えば済む。
目的が\ref{itm:mw}だけで場合については、
「元の|hogemc-h|などのVFを用意できる」だけの知識をもつ人であれば
追加のVFを作って対応できるであろう。
（そうでないと対応は困難である。）
しかし、\ref{itm:mw}と\ref{itm:ajm}の両方を満たす必要がある場合は、
追加のVFの作製はもっと困難になる。
\Pkg{japanese-otf}の複雑なVFの内部設計に合わせる必要があるからである。

\medskip

本パッケージは、\Pkg{jfmutil}と併用することで、
\Pkg{japanese-otf}のVFを置き換えるための和文VFの
設定を支援するものである。具体的には
\begin{quote}
カスタムのメトリックをもった横組・縦組の和文VFの組があるときに、
\Pkg{japanese-otf}をそのメトリックで使えるような設定を作り出す
\end{quote}
ための作業を容易にする。

%===========================================================
\section{実際の手順}
\label{sec:Procedure}

実際に、前述の例に従って、|hogemc-h|と|hogemc-v|のVFの組
\footnote{代わりに|hogegt-h|と|hogegt-v|のVFの組を使ってもよい。
  とにかく入力として使うVFの組みは1つであり、
  そのメトリックが全部の書体（ファミリ・ウェイト）に対して適用される。}%
から、そのメトリックを継承した新しい\Pkg{japanese-otf}の
和文フォント設定を作成するための手順を示す。

使うソフトウェアは次の2つ。

\begin{itemize}
\item \Pkg{pxjodel}パッケージ（本パッケージ）。
\item \Pkg{jfmutil}パッケージが提供する|jfmutil|コマンド。
\end{itemize}

\paragraph{手順1：VFの生成と配置}
最初に一度だけ行う準備作業。

\begin{enumerate}
\item 入力となる和文VFのファイル
  （|hogemc-h.tfm|、|hogemc-h.vf|、|hogemc-v.tfm|、|hogemc-v.vf|）
  を{\TeX}から見える場所（カレントディレクトリでもよい）に置く。
  これらのVFが{\TeX}で使えている状態であれば、
  既にそうなっているはずである。
\item 今作ろうとしている設定に対する名前を用意する。
  これは生成されるVFの名前の接頭辞として使われるので、
  \Strong{接頭辞}と呼ぶことにする。
  ここでは“|hoge|”を使うことにする。
\item 次のコマンドを実行する。
\begin{quote}\small\begin{verbatim}
jfmutil jodel hogemc-h hoge
jfmutil jodel hogemc-v hoge
\end{verbatim}\end{quote}
  \Note 最後の引数は「接頭辞」である。

  これで|hoge--|で始まる名前のVF（|*.tfm|と|*.vf|ファイル）が
  大量に生成される。
\item 生成されたVFのファイルを{\TeX}から見える場所に配置する。
  例えば\Means
  \begin{itemize}
  \item |*.tfm| → |$TEXMFHOME/fonts/tfm/public/jodel-hoge/|
  \item |*.vf| → |$TEXMFHOME/fonts/vf/public/jodel-hoge/|
  \end{itemize}
  \Note 末尾のディレクトリの名前は何でもよい。
  \Note 必要に応じて |mktexlsr|。
\end{enumerate}

\paragraph{手順2：新しいVFの適用}
手順1で作製した新しいVFを
{\pLaTeX}文書に適用するための手順。

\begin{enumerate}
\item プレアンブルで\Pkg{japanese-otf}%
  （{\LaTeX}パッケージ名は|otf|）を読みこんだ後
  （直後が望ましい）に、\Pkg{pxjodel}パッケージを
  |prefix=hoge|のオプションを付けて読み込む。
  例えば以下のようになる。
\begin{quote}\small\begin{verbatim}
\usepackage[deluxe,jis2004]{otf}
\usepackage[prefix=hoge]{pxjodel}
\end{verbatim}\end{quote}
  \Note もちろんこの|hoge|は「接頭辞」である。
  \Note あるいは次のように2つのパッケージの読込をまとめられる。
\begin{quote}\small\begin{verbatim}
\usepackage[deluxe,jis2004,prefix=hoge]{pxjodel}
\end{verbatim}\end{quote}
\end{enumerate}

%===========================================================
\section{注意事項}
\label{sec:Notice}

\begin{itemize}
\item 先の例では{\pTeX}のVFを用いたが、{\upTeX}のVFを用いる場合
  でも手順は全く音字である。
\item 入力とする和文VFは「{\pTeX}または{\upTeX}の標準の日本語用
  原メトリックTFM」（すなわち
  |rml|(|v|)、|gbm|(|v|)、
  |uprml-|\{|h|,|hq|,|v|\}、|upgbm-|\{|h|,|hq|,|v|\}
  の何れか）のみを参照するものでなければならない。
  \Note ただしこれらのTFMを間接的に（別のVFを挟んで）
  参照していてもよい。
\item |jfmutil jodel|の実行において、入力のVFのエンジン種別
  および書字方向は自動的に判定され、
  出力のVFの種別もそれに応じたものになる。
  \begin{itemize}
  \item 例えば、入力のVFが「{\pTeX}横組用」であれば、出力は
    |hoge--nmlminr-h|のようになり、
    入力のVFが「{\upTeX}縦組用」であれば、出力は
    |hoge--upnmlminr-v|のようになる。
  \item ただし、参照先のTFMのエンジン種別が混在している場合は、
    入力のVFは{\pTeX}用と見なされる。
    ここで{\upTeX}用として扱いたい場合は
    |jfmutil jodel|に|--uptex|を付ける必要がある。
  \end{itemize}
\item |jfmutil jodel|に|--unicode|を付けることで、
  「\Pkg{pxufont}パッケージを併用した場合の和文VF」
  を作製できる。
  この場合は|zu-hoge--upnmlminr-h|のような名前のVFが衆力される。
  ただし入力のVFは{\upTeX}用に限られ、またその参照先のTFMは
  全て{\upTeX}用のものでなければならない。    
\item |jfmutil jodel|を使う場合は、\Pkg{japanese-otf}の|expert|指定に
  対応する和文VFは作られないため、|expert|を用いることはできない。
  \Note \Pkg{pxjodel}自体は対応しているので、
  自力で|hoge--expminr-h|などのVFを作れば、
  それを適用させることはできる。
\end{itemize}

%===========================================================
\section{ところでjodelって何}
\label{sec:Jodel}

多分、“\underline{j}apanese \underline{o}tf \underline{del}uxe”
の略、のはず。
“yodel”ではないことに注意。

%===========================================================
\end{document}
%% EOF
