ループとinput@path

ループとinput@path

コマンドで再帰パスを使用しようとしています\input@pathが、不可能のようです (読んだところによると、私は TexLive 2012 と Linux を使用しています)。

そこで、 でループを作成するという次のアイデアを思いつきました\input@pathが、うまくいきません。理由もわかりません...

私がやったことは以下の通りです:

\newcounter{path}
\setcounter{path}{0}
\def\nom{%
  \ifcase\thepath Cours%
  \or Livres%
  \fi
}
\def\input@path{%
 \loop \ifnum \thepath<3
   {~/Exercices/\nom/Derivee/}
 \stepcounter{path} \repeat
}

誰かにアイデアがあれば、とても助かります。

答え1

の形式は\input@path固定されており、各パスエントリは中括弧で囲まれ、それ以上の区切りはありません。ループなどのその他のものは禁止されています。ただし、エントリを追加することは可能です。

\makeatletter
\newcounter{path}
\setcounter{path}{0}
\newcommand*{\nom}{%
  \ifcase\value{path}%
    Cours% 0
  \or
    Livres% 1
  \or
    Two% 2
  \fi
}
\@ifundefined{input@path}{%
  \let\input@path\@empty
}{}
\loop
\ifnum\value{path}<3 %
  \edef\input@path{%
    \input@path
    {\string~/Exercises/\nom/Derivee/}%
  }%
  \stepcounter{path}%
\repeat
\typeout{input@path: \input@path}
\makeatother

いくつかのコメント:

  • 入力文字列は\edef、遅かれ早かれいずれ拡張されるため、 によって拡張されます。チルダは~通常、アクティブ文字であるため、拡張を防ぐために、アクティブ文字を非アクティブ文字 (catcode 12) に変換する がプレフィックスとして付けられます\string

  • この例\value{<counter>}では の代わりにを使用しています\the<counter>。後者の形式は印刷用であり、必ずしも単純なアラビア数字に展開されるとは限らないためです。

  • の番号 2 の定義が\ifcase欠落していました。

関連情報