currfile 包

currfile 包

我在两个目录中使用了多个输入文件:

dirA/其中有一个dirA/A.tex输入文件dirA/dirB/B.text

我用来打印currfilecurrfiledir

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/,您可以选择以下解决方案之一来自动化整个过程。

  1. 打印子目录名称没有尾随/

    在你的序言中添加以下几行:

    \newcommand{\currlastdir}{%
      \StrCount{\currfiledir}{/}[\numberofdirs]%
      \ifnum\numberofdirs=1\StrBefore{\currfiledir}{/}\else%
      \StrBehind[\numexpr\numberofdirs-1\relax]{\currfiledir}{/}[\currfilesubdir]%
      \StrBefore{\currfilesubdir}{/}\fi%
    }
    

    然后在你的子文档中使用

    \currlastdir
    

    代替

    \currfiledir
    

    然后你就会被dirD打印出来。

  2. 打印子目录名称尾随/

    在你的序言中添加以下几行:

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

相关内容