どうやら \IfFileExists は otf では動作しないのでしょうか?

どうやら \IfFileExists は otf では動作しないのでしょうか?

TeXlive 2023、Linux、lualatex を使用します。

驚いたことに、ファイルがホーム ディレクトリにインストールされているかどうかに関係なく、ファイルが見つから\IfFileExistsないようです。MWE:*.otftexmf-disttexmf

% !TeX TS-program = lualatex
% !TeX encoding = UTF-8
\documentclass{article}
\usepackage{fontspec}
\IfFileExists{LibertinusSerif-Regular.otf}{
  \typeout{FOUND IT}
}{
  \typeout{NOT FOUND} % This is the response.
}
\setmainfont{Libertinus Serif}
\begin{document}
Hello World. % Prints in LibertinusSerif-Regular.otf.
\end{document}

でコンパイルする場合lualatex、ファイルは確実に存在するため、コマンドライン出力 (およびログ ファイル) には が含まれると予想されますFOUND IT。Libertinus Serif フォント ファミリをメイン フォントとして使用しようとすると、正常に動作します。ただし、\IfFileExists正しいファイル拡張子を持つ ファイルが見つかりません。

コマンドがあることはわかっています\IfFontExistsが、フォントがない場合には非常に長い時間がかかる可能性があるため、そのように実行することは望ましくありません。

答え1

を使用すると、ツリー、つまり意味のあるファイル(手動で追加されたものも含む)\IfFileExistsのみを検索できます。$TEXINPUTS\input

texmf-distを使用して、ツリー全体 (ほぼ)で検索を実行する関数を定義できますkpsewhich

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\IfFileInTEXTree}{O{}mmm}
 {
  \sys_get_shell:nnN { kpsewhich~#1~#2 } {\escapechar=-1\scan_stop:} \l_tmpa_tl
  \tl_if_blank:VTF \l_tmpa_tl { #4 } { #3 }
 }

\ExplSyntaxOff

\IfFileInTEXTree{LibertinusSerif-Regular.otf}{%
  \typeout{FOUND IT}%
}{
  \typeout{NOT FOUND}%
}

\IfFileInTEXTree{whatever.otf}{%
  \typeout{FOUND IT}%
}{
  \typeout{NOT FOUND}%
}

\stop

オプションを追加することもできますkpsewhich(マニュアルを参照)

\IfFileInTEXTree[<options>]{<filename>}{<true>}{<false>

これには、制限のないシェル エスケープは必要なく、デフォルトの制限されたシェル エスケープだけが必要です。

ログファイルには

(|kpsewhich  LibertinusSerif-Regular.otf)
FOUND IT
(|kpsewhich  whatever.otf)
NOT FOUND

関連情報