TeX/file

Last-modified: 2011-06-02 (木) 05:25:13

\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.}}}