dvips が otf の expert に対応していないようです。

dvips が otf の expert に対応していないようです。

- 流橋 利樹 の投稿
返信数: 14
TeXフォーラムにご参加の皆様には日頃大変お世話になっており、誠にありがとうございます。

本日 TeX を更新したところ謎の現象に見舞われてしまい、なにか対策がないかご相談させていただきたく、投稿している次第です。

症状としては、MacTeX 2021(Homebrew でインストール)で以下の文書をタイプセットし、生成された ps ファイルを Ghostscript で表示しようとするとエラーになる、というものです。

\documentclass[dvips,uplatex]{jsarticle}
\usepackage[expert]{otf}
\begin{document}
% あ安 % OK
安あ % NG
\end{document}

uplatex test.tex
dvips test.dvi
gs test.ps

これがエラーになります(ps2pdf でも同様です)。エラーメッセージは以下のとおりです。

----------
Error: /undefined in Np
Operand stack:

Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1974 1 3 %oparray_pop 1973 1 3 %oparray_pop 1961 1 3 %oparray_pop 1817 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionary stack:
--dict:732/1123(ro)(G)-- --dict:0/20(G)-- --dict:102/200(L)-- --dict:104/300(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is 31775
GPL Ghostscript 9.52: Unrecoverable error, exit code 1
----------

単純に dvips が対応していないのであれば諦めるしかありませんが、「あ安」だと問題ないので、なんとかなるのではないかと淡い期待を抱いているところです。

なお、expert をやめれば問題ありませんし、dvipdfmx であれば「安あ」でも問題ないようです。

なにか dvips で otf の expert を使う妙案がありましたらご教示いただきたくお願い申し上げます。

----- 当方の環境 -----
macOS 10.15.7
uplatex e-upTeX 3.141592653-p3.9.0-u1.27-210218-2.6 (utf8.uptex) (TeX Live 2021)
dvips(k) 2021.1
Ghostscript 9.52
流橋 利樹 への返信

Re: dvips が otf の expert に対応していないようです。

- はやて (h20y6m) の投稿

こちらの投稿でも触れられている cjk-gs-integrate は試されたでしょうか?

はやて (h20y6m) への返信

Re: dvips が otf の expert に対応していないようです。

- 流橋 利樹 の投稿
ご返信ありがとうございます。私の質問の仕方が不適切であることをやんわりとご指摘いただいたものと思います。

expert をやめたり「あ安」なら問題ないことから察するに、原ノ味フォントの設定は特段問題ないと思いますが、念のため、ローカルの設定(~/Library/texlive、~/Library/texmf、~/Library/ghostscript)を削除して、

sudo cjk-gs-integrate --link-texmf --force
kanji-config-updmap-sys --jis2004 haranoaji

を実行してみましたが、残念ながら効果はありませんでした。

-----
~/tmp gs test.ps
GPL Ghostscript 9.52 (2020-03-19)
Copyright (C) 2020 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Loading HaranoAjiMincho-Regular-UniJIS-UTF16-H font from /usr/local/Cellar/ghostscript/9.52/share/ghostscript/9.52/Resource/Font/HaranoAjiMincho-Regular-UniJIS-UTF16-H... 20482596 18907400 4274984 2727676 1 done.
Error: /undefined in Np
Operand stack:

Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1974 1 3 %oparray_pop 1973 1 3 %oparray_pop 1961 1 3 %oparray_pop 1817 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionary stack:
--dict:731/1123(ro)(G)-- --dict:0/20(G)-- --dict:102/200(L)-- --dict:104/300(L)--
Current allocation mode is local
Last OS error: No such file or directory
Current file position is 31727
GPL Ghostscript 9.52: Unrecoverable error, exit code 1
-----
流橋 利樹 への返信

Re: dvips が otf の expert に対応していないようです。

- t tk の投稿
昨年より japanese-otf-uptex の virtual fontの軽量化という取り組みをしておりました。
関連トピックス japanese-otf-uptex v0.26

ご指摘の現象を確認しました。
dvips を軽量 vf に対応させたつもりでしたが不完全な部分が残っていました。開発側の立場の正攻法は dvips の修正が必要です。

ユーザー様側での取り敢えずの対処法は、
  1. japanese-otf-uptex v0.25 に戻す。
  2. 本文用vfの軽量化をやめて再生成したものを使う。
    具体的には、vf生成スクリプトumakeotf{,_brsg,_jis04,_prop} の中のumkjvfの "-omitfw"オプションを消去してvf生成スクリプトを実行。
のどちらかで対応可能だと思います。

ご不便を掛けて申し訳ありません。
t tk への返信

Re: dvips が otf の expert に対応していないようです。

- 流橋 利樹 の投稿
ご多忙の中ご確認並びにご返信いただき誠にありがとうございました。

ご教示いただいた方法の 2 で生成された 574 個の vf に差し替えたところ見事に解決いたしました。重ねて御礼申し上げます。

追伸 私のパソコンが非力なのが原因ですが、pgfplots は 3D グラフの生成に時間がかかるため、未だに PSTricks の呪縛にとらわれております。大変な作業とは思いますが、引き続き dvips への対応を考慮していただけますとものすごく喜びます。
t tk への返信

Re: dvips が otf の expert に対応していないようです。

- t tk の投稿
dvips の不具合は、TeX Live svn r58812 で修正できたと思います。
私の調べた範囲では副作用もなく上手く動いているように見えます。
検証漏れがあるかもしれません。
何かお気付きの点があればお知らせください。

t tk への返信

Re: dvips が otf の expert に対応していないようです。

- 流橋 利樹 の投稿
早速ご対応いただき誠にありがとうございます。
TeX Live バイナリの生成に不慣れですが、

rsync -a --delete --exclude=.svn tug.org::tldevsrc/Build/source/ tmp
cd tmp
./Build

のように実行ところ一応 dvips を生成できたようです。(make install せずに)dvips バイナリ(と念のため同じフォルダに入っていた 8 個の *.pro)を手作業で MacTeX 2021 に取り入れてみました。

その結果件の問題は修正されていることを確認できました。

ただ、別の問題として、ルビが豆腐になってしまうようです。expert を外せば正常に出力できます。

\documentclass[dvips,uplatex]{jsarticle}
\usepackage[expert]{otf}
\usepackage{okumacro}
\begin{document}
\ruby{Newton}{ニュートン}% 「ニュートン」が豆腐に
\end{document}

dvipdfmx でも同様です(expert をとれば正常、つけると豆腐)。
流橋 利樹 への返信

Re: dvips が otf の expert に対応していないようです。

- t tk の投稿
ルビが豆腐になってしまう

ここで指定している実フォントは何でしょうか?
原ノ味フォントはルビ用仮名のグリフが非搭載となっているようです。
もしそうだとするとソフトウェア的には正常な動作と思います。

dvipsパッチ + 軽量vf の動作確認、ありがとうございました。
t tk への返信

Re: dvips が otf の expert に対応していないようです。

- 流橋 利樹 の投稿
大変失礼いたしました。ご推察の通り原ノ味です。

恥ずかしながらルビ用かななどというものが存在することを認識しておりませんでした.....

前言を撤回させていただき、新しい dvips + japanese-otf-uptex で問題なくタイプセットできております。新年度のご多忙の時期に早速ご対応いただき誠にありがとうございました。
流橋 利樹 への返信

Re: dvips が otf の expert に対応していないようです。

- t tk の投稿
原ノ味フォントを使用し、expertオプションで組方向専用仮名のグリフを使いつつrubyを使いたい場合
今までは ruby が豆腐になってしまいました。
これは、原ノ味 ( その元の 源ノ ) フォントにruby専用仮名グリフが無いためで、仕様通りなのですが、
今回 、回避策として japanese-otf-uptex v0.29 の更新にオプション 'noruby' を追加しました。

\usepackage[expert,noruby]{otf}

とすれば、原ノ味フォントでも豆腐にならないはずです。
本日CTANに投稿したので、それが届けば使えるようになると思います。
t tk への返信

Re: dvips が otf の expert に対応していないようです。

- 流橋 利樹 の投稿
素晴らしい機能を実装していただき有難うございました。早速活用させていただきます。

なお、\gtfamily\ebseries(極太ゴシック)のとき、ルビが極太にならないようです。

極太文字にルビをふることは想定されないかもしれませんが、バグの可能性も考え、念のためご報告申し上げます。

----- 文書例 -----
\documentclass[dvips,uplatex]{jsarticle}
\usepackage[deluxe,expert,noruby]{otf}
\usepackage{okumacro}

\begin{document}
{\mcfamily\ltseries \ruby{猫}{ねこ}}
{\mcfamily \ruby{猫}{ねこ}}
{\mcfamily\bfseries \ruby{猫}{ねこ}}
{\gtfamily \ruby{猫}{ねこ}}
{\gtfamily\bfseries \ruby{猫}{ねこ}}
{\gtfamily\ebseries \ruby{猫}{ねこ}}% このルビが太くならないようです。
{\mgfamily \ruby{猫}{ねこ}}
\end{document}
----------

以下のような警告が出ます。

> LaTeX Font Warning: Font shape `JT2/rubyg/eb/n' undefined
> (Font) using `JT2/rubyg/m/n' instead on input line 20.
> LaTeX Font Warning: Font shape `JY2/rubyg/eb/n' undefined
> (Font) using `JY2/rubyg/m/n' instead on input line 20.
流橋 利樹 への返信

Re: dvips が otf の expert に対応していないようです。

- t tk の投稿
ご報告ありがとうございます。
下記のような otf.sty の修整でいかがでしょうか。
ただし、前半は本件とは別件 (https://github.com/t-tk/japanese-otf-uptex/issues/8#issuecomment-1699265979) です。

-----
diff --git a/japanese-otf-uptex/sty/otf.sty b/japanese-otf-uptex/sty/otf.sty
index 635dedb..f8776bd 100644
--- a/japanese-otf-uptex/sty/otf.sty
+++ b/japanese-otf-uptex/sty/otf.sty
@@ -287,6 +287,7 @@
\newcommand\set@character@{\afterassignment\put@character@\@tempcnta}
\newcommand\put@character@{%
\otf@kanjishape{-}\selectfont%
+ \advance\@tempcnta by "110000
\kchar\@tempcnta%
}
\catcode`\"=\count@
@@ -470,6 +471,8 @@
\DeclareFontShape{\otf@JTn}{hgt}{eb}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ expgotheb\nlck@sfx@-v}{}
\DeclareFontShape{\otf@JYn}{ruby}{l}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \ruby@pfx@ minl-h}{}
\DeclareFontShape{\otf@JTn}{ruby}{l}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \ruby@pfx@ minl-v}{}
+ \DeclareFontShape{\otf@JYn}{rubyg}{eb}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \ruby@pfx@ gotheb-h}{}
+ \DeclareFontShape{\otf@JTn}{rubyg}{eb}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \ruby@pfx@ gotheb-v}{}
\else
\DeclareFontShape{\otf@JYn}{mg}{m}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ nmlmgothr\nlck@sfx@-h}{}
\DeclareFontShape{\otf@JTn}{mg}{m}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ nmlmgothr\nlck@sfx@-v}{}
t tk への返信

Re: dvips が otf の expert に対応していないようです。

- 流橋 利樹 の投稿
遅くなりましたがパッチを適用することにより正常にタイプセットできることを確認いたしました。ご多忙の中ご対応いただき誠にありがとうございました。
流橋 利樹 への返信

Re: dvips が otf の expert に対応していないようです。

- t tk の投稿
ご確認ありがとうございました。
更新をCTANに投稿し、掲載されました。配布が行き渡れば利用可能になると思います。
https://www.ctan.org/pkg/japanese-otf