\openin
\openin\@inputcheck FilePath
\ifeof\@inputcheck
Failed
\else
Succeeded
\fi
\closein\@inputcheck
は期待通りの挙動
\edef\@tempa{FilePath}
\openin\@inputcheck \@tempa
\ifeof\@inputcheck
Failed
\else
Succeeded
\fi
\closein\@inputcheck
では, 期待通りに動かない.
\edef\@tempa{FilePath}
\openin\@inputcheck \@tempa \relax
\ifeof\@inputcheck
Failed
\else
Succeeded
\fi
\closein\@inputcheck
だとうまくいうようす。
原理がよく判らない。あとで考える。
\input - TeX primitive
\InputFileExists
\long\def \InputIfFileExists#1#2{%
\IfFileExists{#1}%
{#2\@addtofilelist{#1}\@@input \@filef@und}}
(Definition in latex.ltx)
\IfFileExistsにより, file の有無を確認してから読込み準備をして, filelist に追記して, それから file を実際に読み込む.
\input - LaTeX macro
\def\input{\@ifnextchar\bgroup\@iinput\@@input}
\def\@iinput#1{%
\InputIfFileExists{#1}{}%
{\filename@parse{#1}%
\edef\reserved@a{\noexpand\@missingfileerror
{\filename@area\filename@base}%
{\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
\reserved@a}}
\def\@input#1{%
\IfFileExists{#1}{\@@input\@filef@und}{\typeout{No file #1.}}}
\def\@input@#1{\InputIfFileExists{#1}{}{\typeout{No file #1.}}}