dvipdfmx でフォントを発見できない

dvipdfmx でフォントを発見できない

- Suda M の投稿
返信数: 2
表題の通り、dvipdfmxでフォント(HaranoAjiMincho-Regular.otf)を発見できず、PDFが生成できなくて困っております。

なるべく回答を検討いただくのに必要な情報は書いたつもりですが、不足があれば申し付けてください。

### 概要
latexmk を用いてLaTeXファイルをPDFにビルドしようとすると、以下のエラーが出て生成に失敗する。

```
dvipdfmx:warning: Could not locate a virtual/physical font for TFM "uprml-h".
dvipdfmx:warning: >> This font is mapped to a physical font "HaranoAjiMincho-Regular.otf".
dvipdfmx:warning: >> Please check if kpathsea library can find this font: HaranoAjiMincho-Regular.otf
dvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output...
```

このエラーを解消し、TeX Live 2022 標準のフォントである HaranoAjiMincho を使ってPDFファイルを生成したい。

### 環境

- Windows 11 Pro (22H2)
- TeX Live 2022
- ネットワークインストーラで今回質問する問題に行き詰まったため、アンインストール後ISOインストーラで再インストールし、再度同じ問題に遭遇
- ISOインストーラでのインストール直後に実行 + `tlmgr update --self --all` してから実行 したが、問題は解決せず
- Shell: PowerShell (v7.2.4)
- WSLなどは用いず、Windowsターミナルからそのまま PowerShell を用いて実行している


### 実行したコマンド
以下の内容のLaTeXファイル (example.tex) に対して

```
\documentclass{ujarticle}
\begin{document}
こんにちは!
\end{document}
```

以下のコマンドを実行。

```
$ latexmk ./example.tex
```

なお、`.latexmkrc` は `%UERPROFILE%` 直下に配置されており、以下の内容。

```
$latex = 'uplatex %O -kanji=utf8 -no-guess-input-enc -interaction=nonstopmode -file-line-error %S';
$bibtex = 'upbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex -U %O -o %D %S';
$pdf_mode = 3;
$ENV{TZ} = 'Asia/Tokyo';
$ENV{OPENTYPEFONTS} = 'c:/Windows/Fonts//:';
$ENV{TTFONTS} = 'c:/Windows/Fonts//:';
```

latexmkコマンドを実行した直後に以下のログが表示されているので、このファイルの読み込みには成功していると判断。

```
Rc files read:
C:/Users/<私のユーザ名>/.latexmkrc
```

### 試した・確認したこと
以下、`$` から始まる行は実行コマンド、 `>` から始まる行は結果出力

#### kanji-config-updmap による再設定
日本語フォントのPDFへの埋め込み設定をするコマンドがあると知ったので、現状確認と再設定のために実行した。

```
$ kanji-config-updmap-sys status
> CURRENT family for ja: haranoaji (variant: -04)
> Standby family : bizud
> Standby family : haranoaji
> Standby family : ipa
> Standby family : ipaex
> Standby family : ms
> Standby family : yu-win10
```

現在の設定が haranoaji になっており、さらにそれが Standby 状態であることが分かった。

念のため haranoaji に設定するコマンドを実行した。

```
$ kanji-config-updmap-sys haranoaji
```

ログは省略するが、エラーは出ず正常終了した。しかし表題の問題は解決しなかった。

#### Windows OS へのフォントのインストール
原の味明朝(+ゴシック)を[GitHub](https://github.com/trueroad/HaranoAjiFonts)からダウンロードし、Windows OSにインストールした。インストールは問題無く終了し、Microsoft Wordなどで使用できることを確認した。

しかし表題の問題は解決しなかった。

#### kpathsea がフォントを発見できているか確認
dvipdfmxを始めとしてLaTeXはファイル検索を kpathsea なるライブラリを介して行っていると聞いたので、下記コマンドで kpathsea が該当ファイル(HaranoAjiMincho-Regular.otf)を発見できているか確認した。

```
$ kpsewhich.exe -a HaranoAjiMincho-Regular.otf
> c:/texlive/2022/texmf-dist/fonts/opentype/public/haranoaji/HaranoAjiMincho-Regular.otf
> c:/Users/<私のユーザ名>/AppData/Local/Microsoft/Windows/Fonts/HaranoAjiMincho-Regular.otf
```

念のため示されたパスに HaranoAjiMincho-Regular.otf が存在することを確認し、たしかに配置されていた。

<hr />

以上です。何卒よろしくお願いいたします。

P.S. 本質問に直接の関係はありませんが、手元の MacOS では TeX Live 2022 インストール後、何も設定せずにPDFを生成することができました。
Suda M への返信

Re: dvipdfmx でフォントを発見できない

- Z. R. の投稿
$ENV{OPENTYPEFONTS} = 'c:/Windows/Fonts//:';
$ENV{TTFONTS} = 'c:/Windows/Fonts//:';

この行の指定の文字列が誤っています。

$ENV{OPENTYPEFONTS} = 'c:/Windows/Fonts//;';
$ENV{TTFONTS} = 'c:/Windows/Fonts//;';

Windowsでは末尾はコロンでなくセミコロンでないといけません。(PATH環境変数などと同じで、UNIX系であればコロンです。)


正しい方の

c:/Windows/Fonts//;

であれば、Kpathseaの設定で
「既定で探すディレクトリに追加して“c:/Windows/Fonts”以下も探索せよ」
※末尾の“;”が「追加」を意味する
という意味になるのですが、間違っている方の

c:/Windows/Fonts//:

では、
「“c:/Windows/Fonts//:”(だけ)を探索せよ」
※末尾が“:”でないので「追加」でなく「置換」になってしまう
という意味になります。末尾に“:”があるパスは存在しない(というかWindowsでは無効)ので、結局、探索対象のディレクトリが全く存在しなくなったため、フォントが見つからなかったわけです。

Z. R. への返信

Re: dvipdfmx でフォントを発見できない

- Suda M の投稿
ありがとうございます。
確かにそこもおかしかったです。普段の Overleaf の設定をそのまま持ってきたのですが、書き換えの際に見落としていました。


本件、解決しましたのでご報告いたします。
原因は2つありました。


1. ご指摘いただいた環境変数の設定ミス
ENVディクショナリに値を設定する際、値区切りの文字を ; (セミコロン) ではなく : (コロン) にしていたことが原因でした。
コロンをセミコロンに置換することで、latexmkコマンドでビルドする際にも texmf-distなどの中身も正常に検索してくれるようになりました。

2. プロジェクトディレクトリに latexmkrc ファイルが残っていた
こちらがメインの原因でした。お恥ずかしい限り。
latexmkは、プロジェクトディレクトリ(カレントディレクトリなのかも)に latexmkrc ファイル(ファイル名先頭にドット無し)があると、そちらの設定も使用するようです。
今回のプロジェクトは Overleaf から持ってきたもので、Overleaf側の設定のために latexmkrc ファイルがプロジェクトディレクトリに配置してありました。この latexmkrc ファイルには Overleaf にあわせてフォント格納先を示す環境変数などが書かれていますが、これはWindows環境においては誤った設定であるため、フォントを発見できずビルドに失敗します。
P.S. に書いた Mac 環境で上手く動くのは、Mac が Unix ベース(と書くと火種ですが)であるため環境変数の設定をそのまま流用できていたためでした。


今後Overleafとローカル環境をGitで連携して同時に使う人へのメモ
以下のようにすればローカル環境とOverleaf環境を並行して使うことができます。

1. Overleafからプロジェクトをクローンする
2. プロジェクトディレクトリの latexmkrc のうち、Windowsマシンでは適用したくない部分を以下の if ブロックで囲む

if ($^O ne 'MSWin32') {

}


3. Gitにコミットしてpushする

なお、latexmkrc を .gitignore に追加して Overleaf 環境のみに残すという方法をはじめに思いついて試してみましたが、Overleaf側が .gitignore を無視して latexmkrc をコミットしてくる(どういう実装なんだ)ので、この方法は使えませんでした。