获取文件内容中的部分文件名

获取文件内容中的部分文件名

我只想打印文件名中Ch和之间的字符-,因此我使用包currfilexstring。例如:

\StrBetween[1,1]{\currfilename}{Ch}{-}

如果文件名是“Ch2-2nde.tex”或“Ch14-2nde.tex”,则应该给出 2 或 14,但不起作用。但如果我尝试,\StrBetween[1,1]{Ch2-2nde.tex}{Ch}{-}它仍然\StrBetween[1,1]{Ch14-2nde.tex}{Ch}{-}可以正常工作!我不明白...

答案1

您可以使用命令starred选项\StrBetween来获取结果。当输入包含命令时可以使用此选项。以下示例将有所帮助:

\StrBetween*[1,1]{\currfilename}{Ch}{-}

答案2

问题是\currfilename返回一个“字符串化”的文件名;用 TeXnical 术语来说,所有字符都有类别代码 12。但是,您在第二个可选参数中提供的字符Ch有类别代码 11,因此不匹配。

一种可能性是使用*的变体\StrBetween,它适用\detokenize于所有强制参数(完全扩展后),因此也Ch成为类别代码 12 并且找到匹配项。

另一种可能性是使用l3regex

\documentclass{article}
\usepackage{currfile,xparse,l3regex}

\ExplSyntaxOn
\NewDocumentCommand{\extractnumber}{o}
 {
  \IfNoValueTF{#1}
   {
    \mathxlv_extract_number:N \l_tmpa_tl
    \tl_use:N \l_tmpa_tl
   }
   {
    \mathxlv_extract_number:N #1
   }
 }

\cs_new_protected:Nn \mathxlv_extract_number:N
 {
  \tl_set_eq:NN #1 \currfilename
  \regex_replace_once:nnN { \A Ch ([^-]*) .* \Z } { \1 } #1
 }
\ExplSyntaxOff

\begin{document}

\extractnumber

\extractnumber[\thisfilenumber]

\texttt{\meaning\thisfilenumber}

\end{document}

如果文档被命名Ch2-2nde.tex,则输出为

在此处输入图片描述

如果文档被命名Ch14-abc-def.tex,则输出为

在此处输入图片描述

相关内容