测试 \jobname、\c_sys_jobname_str 后缀时出现问题

测试 \jobname、\c_sys_jobname_str 后缀时出现问题

我有文件名为T-BA-DEC-de-0001_Title1.tex和 的latex 文件T-BA-DEC-de-0002_Text2.tex。我想根据这些文件名切换代码。到目前为止,我尝试使用\ifthenelse和 xstring 包解决问题:

\usepackage{xstring}

\IfBeginWith{\detokenize\expandafter{\c_sys_jobname_str}}{\detokenize{T-BA-DEC-de-0001}}{TRUE}{FALSE}
\IfBeginWith{\detokenize\expandafter{\c_sys_jobname_str}}{\detokenize{T-BA-DEC-de-0002}}{TRUE}{FALSE}

无论我尝试什么,总是\IfBeginWith会遇到 FALSE 条件或产生运行时错误。我做错了什么?

答案1

由于您使用的是expl3for \c_sys_jobname_str,我倾向于自己编写一个快速的“开始于”测试。例如

\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_protected:Npn \WolfiG_test:nnTF #1#2
  { \exp_args:Ne \__WolfiG_test:nn { \tl_to_str:n {#1} } {#2} }
\cs_generate_variant:Nn \WolfiG_test:nnTF { nV }
\cs_new_protected:Npn \__WolfiG_test:nn #1#2
  {
    \cs_set:Npn \__WolfiG_test:w ##1 #1 ##2 \q_stop
      { \tl_if_blank:nTF {##1} }
    \__WolfiG_test:w #2 #1 \q_stop
  }
\cs_new:Npn \__WolfiG_test:w { }
\WolfiG_test:nVTF { T-BA-DEC-de-0001 } \c_sys_jobname_str \T \F
\WolfiG_test:nVTF { T-BA-DEC-de-0002 } \c_sys_jobname_str \T \F

或者如果你想使用“通用字符串”函数

\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\cs_new_protected:Npn \WolfiG_test:nnTF #1#2
  {
    \str_if_eq:eeTF {#1} { \str_range:nnn {#2} { 1 } { \str_count:n {#1} } }
  }
\cs_generate_variant:Nn \WolfiG_test:nnTF { nV }
\WolfiG_test:nVTF { T-BA-DEC-de-0001 } \c_sys_jobname_str \T \F
\WolfiG_test:nVTF { T-BA-DEC-de-0002 } \c_sys_jobname_str \T \F

我曾经\str_range:nnn从(作业名称)中提取一个与(测试字符串)#2长度相同的子#1字符串,然后对两者进行比较。

相关内容