我有文件名为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
由于您使用的是expl3
for \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
字符串,然后对两者进行比较。