dvi の時点でグリフの unicode を取得できますか?

dvi の時点でグリフの unicode を取得できますか?

- 環耀 望月 の投稿
返信数: 3
実行環境
OS:Windows 10 Home 64bit
TeX 環境:TeX Live 2019 win64 版
※ さらに mutool をインストール.


こんにちは.

私は TeX を利用したとあるプログラムを開発中なのですが, そこでもし (u)pLaTeX で生成した dvi ファイルの時点からグリフの unicode を得ることができたら良いなと思っています.

ちなみに ptex2pdf・dvipdfmx 等によって得た pdf ファイルからグリフの unicode を得る方法の一つとして, mutool を利用する方法があることには気づきました.
たとえば, 以下の utf8 で保存した test.tex から以下のコマンド
「ptex2pdf -l -u test.tex」
text.pdf を得たとします.
========== test.tex ==========
\documentclass{standalone}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{amsfonts}
\begin{document}
Hテスト
\end{document}
============================

ここで以下のようなコマンド
「mutool trace test.pdf」
で mutool を使うと, 標準出力で test.pdf 中のグリフの unicode を確認できます.
========== 標準出力 ==========
<document filename="test.pdf">
<page number="1" mediabox="0 0 38.63 9.59">
<set_default_colorspaces gray="DeviceGray" rgb="DeviceRGB" cmyk="DeviceCMYK" oi="None"/>
<fill_text colorspace="DeviceGray" color="0" transform="1 0 0 -1 72 72.004">
<span font="SQJXDC+CMR10" wmode="0" bidi="0" trm="9.9626 0 0 9.9626">
<g unicode="H" glyph="H" x="-72" y="63.564" />
</span>
<span font="JFXBKN+IPAexMincho" wmode="0" bidi="0" trm="9.5862 0 0 9.5862">
<g unicode="U+30c6" glyph="962" x="-62.131" y="63.564" />
<g unicode="U+30b9" glyph="949" x="-52.5448" y="63.564" />
<g unicode="U+30c8" glyph="964" x="-42.9586" y="63.564" />
</span>
</fill_text>
</page>
</document>
===========================

ほかにも, 得られた dvi ファイルを dvisvgm で svg に変換する際にテキストデータを保持するように設定し(オプション -n, --no-fonts を使わなければ), svg ファイルの中身を見ればグリフの unicode を発見することもできました.

ただ, dvi の時点でグリフの unicode を得る方法があるのか?そもそも不可能なのか?わかりません.

無いのであれば上記の方法でいいのですが, もし有るのであればご教示いただけると助かります.

よろしくお願いします.
環耀 望月 への返信

Re: dvi の時点でグリフの unicode を取得できますか?

- aminophen の投稿
回答が付いていないので:
DVI を読むツールとして,updvitype が使えるかもしれません。
出力は非常に読みづらいですが…。

あとは dvispc も候補でしょうか。
「set2」と書かれた行の後に続いている数値が Unicode のはずです。
aminophen への返信

Re: dvi の時点でグリフの unicode を取得できますか?

- t tk の投稿
質問者の環耀 横浜さんはもう解決済みかと思いますが、
遅まきながら試してみました。
検索でここにたどり着く方もいらっしゃるかも。

U+20BB7 はいわゆる「土よし」で、下記の「""」は実際には U+20BB7 の方です。

入力 uplatex
=== jp_font.tex ===
\documentclass{ujarticle}
\begin{document}
テスト \kchar"20BB7野家
test
\end{document}
======

$ uplatex jp_font.tex

$ updvitype jp_font.dvi > jp_font.dvitype
=== jp_font.dvitypeの一部 ===
114: fntdef1 15: upjisr-h
138: fntnum15 current font is upjisr-h
139: set2 12486("30C6) type=0 h:=4693832+630600=5324432, hh:=337
142: set2 12473("30B9) type=0 h:=5324432+630600=5955032, hh:=377
145: set2 12488("30C8) type=0 h:=5955032+630600=6585632, hh:=417
148: right3 218453 h:=6585632+218453=6804085, hh:=431
152: set3 134071("20BB7) type=0 h:=6804085+630600=7434685, hh:=471
156: set2 37326("91CE) type=0 h:=7434685+630600=8065285, hh:=511
159: set2 23478("5BB6) type=0 h:=8065285+630600=8695885, hh:=551
162: right3 157650 h:=8695885+157650=8853535, hh:=561
[テスト 野家 ]
======

$ dvispc -a -JU jp_font.dvi > jp_font.dvispc
=== jp_font.dvispcの一部 ===
fntdef1 15 0 630600 655360 0 8 'upjisr-h'
fntnum15
set2 0x30c6 "テ"
set2 0x30b9 "ス"
set2 0x30c8 "ト"
right3 218453
set3 0x20bb7 ""
set2 0x91ce "野"
set2 0x5bb6 "家"
======