我尝试在命令中使用递归路径\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
,因为它们迟早都会被扩展。波浪号~
通常是活动字符,为了防止扩展,它以 开头,\string
将活动字符转换为非活动字符(catcode 为 12)。该示例使用
\value{<counter>}
而不是\the<counter>
,因为后一种形式用于打印,并且可能并不总是扩展为简单的阿拉伯数字。\ifcase
缺少2 号的定义。