我在两个目录中使用了多个输入文件:
dirA/
其中有一个dirA/A.tex
输入文件dirA/dirB/B.text
我用来打印currfile
出currfiledir
dirA/dirB
有什么办法可以让它直接给我吗dirB
?
答案1
这可以借助字符串包及其宏\StrBehind
。
在你的情况下,如果\currfiledir
返回dirA/dirB/
,那么
\StrBehind{\currfiledir}{/}
将返回dirB/
。
事实上,结果是“所有的东西背后/
”
如果你还想删除尾随,/
你可以使用
\StrBehind{\currfiledir}{/}[\currfilesubdir]
\StrBefore{\currfilesubdir}{/}
这样,您首先将 的结果保存\StrBehind
在宏中\currfilesubdir
,然后将其用作 的参数,\StrBefore
该参数执行与 相反的操作\StrBehind
。结果将是dirB
。
显然,只有当您的文件位于二级子目录中时,这才有效dirA/dirB/
。
如果您的文件位于更深的子目录中(假设dirA/dirB/dirC/dirD/
,您可以选择以下解决方案之一来自动化整个过程。
打印子目录名称没有尾随
/
在你的序言中添加以下几行:
\newcommand{\currlastdir}{% \StrCount{\currfiledir}{/}[\numberofdirs]% \ifnum\numberofdirs=1\StrBefore{\currfiledir}{/}\else% \StrBehind[\numexpr\numberofdirs-1\relax]{\currfiledir}{/}[\currfilesubdir]% \StrBefore{\currfilesubdir}{/}\fi% }
然后在你的子文档中使用
\currlastdir
代替
\currfiledir
然后你就会被
dirD
打印出来。打印子目录名称和尾随
/
在你的序言中添加以下几行:
\newcommand{\currlastdir}{% \StrCount{\currfiledir}{/}[\numberofdirs]% \ifnum\numberofdirs=1\currfiledir\else% \StrBehind[\numexpr\numberofdirs-1\relax]{\currfiledir}{/}\fi% }
然后在你的子文档中使用
\currlastdir
代替
\currfiledir
然后你就会被
dirD/
打印出来。
答案2
你是指这样的吗?
\def\currfiledir{dirA/dirB} % for example
\def\ignorefirstdir{\expandafter\ignorefirstdirA\currfiledir/\end}
\def\ignorefirstdirA#1/#2\end{\ifx^#2^\else\expandafter\ignorefirstdirB#2\end\fi}
\def\ignorefirstdirB#1/#2\end{#1}
Printing only second directory: \ignorefirstdir.