upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- ya ra の投稿
返信数: 12

環境

  • Windows11
  • TeX Live 2025
  • upLaTeX: e-upTeX 3.141592653-p4.1.2-u2.00-250202-2.6 (utf8.uptex)

生じる問題

upLaTeX+dvipdfmx 下で jlreq 文書クラスを用いて文書を作成しています。

ここで、jlreq のフォントメトリックを保ったまま多書体化するために、jlreq-deluxe を使用しました。
加えて、pxchfon を用いてフォントを 源ノ (sourcehan) に変更しました。

すると、次のような 16 のエラーメッセージ(以下は一部抜粋)と missfont.log が生成されました。(詳細は添付ファイルを参照してください)

Font JT2/hmc/m/n/10=zu-jlreq--upnmlminrn-v at 10.0pt not loadable: Metric (TFM/OFM) file not found.
Font JY2/hmc/m/n/10=zu-jlreq--upnmlminrn-h at 10.0pt not loadable: Metric (TFM/OFM) file not found.

missfont.log:

mktextfm zu-jlreq--upnmlminrn-v
mktextfm zu-jlreq--upnmlminrn-h
mktextfm zu-jlreq--upnmlminln-v
mktextfm zu-jlreq--upnmlminln-h
mktextfm zu-jlreq--upnmlminbn-v
mktextfm zu-jlreq--upnmlminbn-h
mktextfm zu-jlreq--upnmlgothrn-v
mktextfm zu-jlreq--upnmlgothrn-h
mktextfm zu-jlreq--upnmlgothbn-v
mktextfm zu-jlreq--upnmlgothbn-h
mktextfm zu-jlreq--upnmlgothebn-v
mktextfm zu-jlreq--upnmlgothebn-h
mktextfm zu-jlreq--upnmlmgothrn-v
mktextfm zu-jlreq--upnmlmgothrn-h
mktextfm zu-jlreq--upnmlminrn-v
mktextfm zu-jlreq--upnmlminrn-h

エラーを解消し、jlreq の下で源ノ+多書体化した文書を作成するにはどのようにすれば良いでしょうか。

補足

pxchfon が指定するフォントによってエラーの有無が変わることが分かっています。

  • エラー無く期待した結果を得る
    • haranoaji
    • ipa
    • ipaex
    • yu-win10
  • エラーが出る
    • sourcehan
    • noto-jp

sourcehannoto-jp 以外の追加フォントに関しては分かりません。


jlreq-deluxe を利用せずに otfdeluxe を使用すると、エラーとなることなく期待した PDF が出力されます。(フォントも適切に埋め込まれます)

最小再現例

実行:

ptex2pdf -u -l -ot -kanji=utf8 -interaction=nonstopmode -file-line-error test.tex

TeX ソース:

\documentclass[uplatex, dvipdfmx, paper=a4paper]{jlreq}
\usepackage{jlreq-deluxe}
%% jlreq-deluxe ではなく、
% \usepackage[deluxe]{otf} %% であれば成功する
\usepackage[sourcehan, unicode]{pxchfon}
\listfiles
\begin{document}

\textmc{\ltseries これは細い明朝体。}
\textmc{これは明朝体。}
\textmc{\bfseries これは太い明朝体。}

\textgt{これはゴシック体。}
\textgt{\bfseries これは太いゴシック体。}
\textgt{\ebseries これは極太ゴシック体。}

\textmg{これは丸ゴシック体。}

\end{document}
ya ra への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- はやて (h20y6m) の投稿
pxchfon に unicode オプション(sourcehan, noto-jp などの非 AJ1 な OTF では必須)を使用するとフォントが "zu-" 付きのものに置き換えられるようです。
(u)pTeX の標準フォントやotfパッケージ用のフォントについては "zu-" 付きのフォントが pxufont パッケージにて提供されていますが、jlreq クラス用フォントや jlreq-deluxe パッケージ用フォントについては "zu-" 付きフォントが提供されていません。
(jlreq-deluxe パッケージを(otf パッケージも)使わない素の jlreq でも同様のエラーが出ると思います。)

正道な解決策は jlreq-deluxe 用の "zu-" 付きフォントを作成することですが……

一応 uplatex であれば(phchfonを使わず)dvipdfmx 実行時に otf-up-noto.map を指定すれば noto フォントにすることは(ある程度)可能です。
はやて (h20y6m) への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- Z. R. の投稿

一応 uplatex であれば(phchfonを使わず)dvipdfmx 実行時に otf-up-noto.map を指定すれば noto フォントにすることは(ある程度)可能です。

この場合は当然「Unicodeのフォントしかない」ので「CIDのフォントは使えない」ことになります。だから \CID とか expert とかがダメなのは予想がつきやすいですが、特に注意が必要なのが
クオート “”`' もCIDのフォントから取っているのでダメになる」
ということです。

otf-up-noto.mapのファイル中ではそもそもCIDのフォントの項目は記載されていないため、dvipdfmxの -f オプションで指定する使い方の場合、CIDのフォントについては“元の設定”(kanji-config-updmapの設定)が使われます。つまり「ダメになる」パターンでは実際にはそこだけharanoaji等になってしまうわけです。

フォントの組み合わせによっては意図通りのフォントになっていないことが極めて気づきにくいのでかなり要注意だと思います。

Z. R. への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- ya ra の投稿

まとめての返信となってしまい申し訳ありません。

はやてさま、ZRさま、ご回答ありがとうございます。

エラーの原因となる背景と対応策を、またその策の注意点を教えていただきありがとうございます。

正道な解決策は jlreq-deluxe 用の "zu-" 付きフォントを作成することです

最終的にこれを自作することが最良策であると理解しました。
jlreq (deluxe)+pxchfon (unicode) で sourcehan フォントの文章を実現するために、これを作成したいと考えています。

作成手順あるいは作成の手引きとなるようなドキュメントを教えていただけますでしょうか。

ya ra への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- Z. R. の投稿

取りあえずこれで実現できるはずです。

①作業用ディレクトリを用意する。

②以下のコマンド群を実行する。

jfmutil jodel --compact --uptex   ujlreq   jlreq
jfmutil jodel --compact --uptex   ujlreq-v jlreq
jfmutil jodel --compact --unicode ujlreq   jlreq
jfmutil jodel --compact --unicode ujlreq-v jlreq

③上記コマンド群の「全てのjlreqbjlreqに置き換えたもの」を実行する。

④同様に「zjlreqに置き換えたもの」「bzjlreqに置き換えたもの」を実行する。

⑤生成された(大量の)TFMとVFファイルを$TEXMFLOCALのツリー下に配置する。 ※$TEXMFLOCAL/fonts/{tfm,vf}/public/jlreq-deluxe/下に置いた後mktexlsr。

jlreq-deluxeパッケージは「LaTeXでの和文フォントの設定の変更」のためにpxjodelというパッケージを利用しています。このpxjodelで使う和文VFを生成するのがjfmutil jodelというコマンドです。
※ただし、jlreq-deluxeパッケージはjfmutilを使わずに自前で和文VFを生成している。
※詳しくはpxjodelのドキュメントを参照。

jfmutil jodelは“Unicode直接指定”(pxufont適用)のための和文VFを生成する機能(--unicodeオプション)があるため、jfmutilが想定通りに動作していれば、これにより「非AJ1なフォント」用の和文VFが得られるはずです。
※ただし、jfmutilがあまりメンテできてないので、最近のupTeX周りの仕様変更に追随できておらず、その辺りに少し不安がある。
※jlreq-deluxeの和文VFとjfmutilの和文VFで設計が異なる可能性があるため、両者を混在させることは避けるべき。取りあえず、jlreqで使われうるものを全部生成しておけば問題ないと思う。

Z. R. への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- ya ra の投稿

ZRさま

作成方法を段階を追って分かりやすく詳細にご教授していただきありがとうございます。加えて、pxjodelとjfmutilの背景情報を教えていただきありがとうございます。
これを見ながら作成させていただきます。

今回の件について、これまで一度も経験がなく不慣れなため、うまくできない可能性もあります。その際は、大変お手数をおかけしますが、改めてご指導いただけると幸いです。
また、すぐに試すことができないため日が空いてしまうかもしれないこともご容赦ください。

Z. R. への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- ya ra の投稿

遅くなり申し訳ありません。

指定されたコマンドを実行すると、kpse faild to find a file と言うエラーが生成されました。kpsewhich が ujlreq.tfm を見つけられないということですが、kpsewhich ujlreq.tfm を実行すると ujlreq.tfm が見つかります。

この場合にはどのように対応すれば良いでしょうか。

環境

  • jfmutil version 1.3.3

実行例

以下では ujlreq での例のみを示していますが、16のコマンドすべてで同様の結果を得ました。

$ jfmutil jodel --compact --uptex ujlreq jlreq
jfmutil: **** Analyze VF 'ujlreq'
jfmutil: kpse failed to find a file: ujlreq.tfm
D:\texlive\2025\bin\windows\runscript.tlu:933: command failed with exit code 255:
perl.exe d:\texlive\2025\texmf-dist\scripts\jfmutil\jfmutil.pl jodel --compact --uptex ujlreq jlreq

$ kpsewhich ujlreq.tfm
d:/texlive/2025/texmf-dist/fonts/tfm/public/jlreq/ujlreq.tfm
ya ra への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- 和田 勇 の投稿

原因は、よくわからないのですが、jfmutil jodel --compact --uptex ujlreq jlreq 入力直後に、perl がインストールされていないので TeXLive 組み込みのもの使うよ云々 のメッセージが記録されていないようなので、独自に perl をインストールされたかと思います。

そのインストール元などの素性は、 perl -V と入力したとき、最後の方に @INC があるのですが、大抵その行以下に 導入した perl が標準で読みにゆくライブラリのパスがあります。

それを見せてもらうのも一つの手でありますが、導入された perl を PATH の調整や一時 uninstall などすることで 一時的に利用できなくすることはできますか?

こちらで試しに scoop で導入した perl を一時的に uninstall して実行したところ、jfmutil 起動ごとに、冒頭に示した警告メッセージが表示されますが、問題なく処理されるようです。

これで対処できると良いのですが...

また参考までに、当方では、以下の powershell のスクリプトコードを make-zu-font.ps1 などとして処理をしています。 よろしければ、適当なディレクトリを作成してご利用ください。

foreach         ( $otF in 'jlreq'  , 'bjlreq', 'zjlreq', 'bzjlreq' ) {
    foreach     ( $inF in 'ujlreq' , 'ujlreq-v'                    ) {
        foreach ( $opt in '--uptex', '--unicode'                   ) {
            jfmutil jodel --compact $opt $inF $otF
        }
    }
}
和田 勇 への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- ya ra の投稿

和田さま、ご指摘ありがとうございます。

独自に perl をインストールされたかと思います。

まさにそうでした。Git for windows と一緒に入った perl が実行されてしまったために発生していたエラーだったようです。

TeX Live 側の perl が実行されるように texmf.cnf の TEXLIVE_WINDOWS_TRY_EXTERNAL_PERL を 0 にすることで問題が解消しました。(外部 perl を実行させる/させないようにする方法は覚えていたのに、外部 perl が実行されていることに思いが至っていませんでした……)


スクリプトまで組んでいただきありがとうございます。私も以下のような Lua を組んで実行していました。

-- run_jfmutil.lua

local jlreq_list = { "jlreq", "bjlreq", "zjlreq", "bzjlreq" }
local modes = { "uptex", "unicode" }
local variants = { "", "-v" }

local tfm_dir = "tfm"
local vf_dir  = "vf"

os.execute(string.format("mkdir \"%s\"", tfm_dir))
os.execute(string.format("mkdir \"%s\"", vf_dir))

for _, jlreq in ipairs(jlreq_list) do
  for _, mode in ipairs(modes) do
    for _, v in ipairs(variants) do
      local cmd = string.format(
        "jfmutil jodel --compact --%s u%s%s %s",
        mode, jlreq, v, jlreq
      )
      print("[RUN] " .. cmd)
      os.execute(cmd)
    end
  end
end

os.execute(string.format("move *.tfm %s", tfm_dir))
os.execute(string.format("move *.vf  %s", vf_dir))
Z. R. への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- ya ra の投稿

和田さまのご助力もあり、教えていただいた jfmutil jodel による TFM と VF の作成と配置が出来ました。

これを踏まえて、先に示している TeX ソースを実行すると、dvipdfmx の部分で次のようなエラーが返ってきました。

これはどのように解消すれば良いでしょうか。

Output written on test.dvi (1 page, 6592 bytes).
Transcript written on test.log.
test.dvi -> test.pdf
[1
dvipdfmx:fatal: Unable to find TFM file "zu-jodhmgothr-hq".

No output PDF file written.
ptex2pdf processing of d:/vsnotes/EDiT-notes/TeXforum/jlreq_deluxe_pxchfon/test failed.

\textmg を使わない場合には問題なく期待する源ノフォントが埋め込まれた PDF が出力されます。

ya ra への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- はやて (h20y6m) の投稿
どうやらPXjodelパッケージに収録されている丸ゴシックのjodel用TFM/VFの名前が間違っているようです。
https://github.com/zr-tex8r/PXjodel/blob/0a41a75737743ec43ca23a9e6c7c21c128796ae1/etc/generate-vf.pl#L17
("mgothr"のはずが"mgothe"になっている)
Z.R.さんに修正していただくことになると思います。

それまで待てない場合は

    jfmutil vfcopy zu-jodhmgothe-hq zu-jodhmgothr-hq otf-ujmgr-h

で zu-jodhmgothr-hq.{tfm,vf} を生成すれば動くみたいです。
(これだけでいいのかはわかりませんが……)
はやて (h20y6m) への返信

Re: upLaTeX下のjlreq-deluxeで多書体化するとpxchfonでフォント変更ができない

- ya ra の投稿

はやてさま

それまで待てない場合は

jfmutil vfcopy zu-jodhmgothe-hq zu-jodhmgothr-hq otf-ujmgr-h

で zu-jodhmgothr-hq.{tfm,vf} を生成すれば動くみたいです。

これを利用して zu-jodhmodethr-hq.{tfm, vf} を生成させ、$TEXMFLOCAL/fonts/{tfm,vf}/public/pxjodel/ に配置し mktexlsr することで、期待した PDF が生成されるようになりました。ありがとうございます。

どうやらPXjodelパッケージに収録されている丸ゴシックのjodel用TFM/VFの名前が間違っているようです。

ZR さま、修正していただいてよろしいでしょうか。お願いいたします。

加えて、「新たに和文フォント(TFM/VF)を作成しない場合の次善策」についてもまとめて記事にしていただきありがとうございました。御礼が遅れてしまい申し訳ありません。