我今天刚刚更新了 TeXLive 2012 的所有软件包,看来它\str_if_eq:xxTF
已经被弃用了。
我如何定义一个宏,以便我可以使用最新的 TeX Live,但仍然能够使用旧版 TeX Live 2011 运行以下命令。当我遇到能够使用旧版本运行的问题时,我发现它非常有用。
因此使用 TeXLive2011 可以正确得出以下结果:
代码:
\documentclass{article}
\usepackage{xparse}
\usepackage{expl3}
\def\SpecialDirName{special}%
\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\GetFileName}{%
O{default}%
m%
m%
m%
}{%
\str_if_eq:xxTF{#1}{\SpecialDirName}{#4}{#2-#3-#4}%
}%
\ExplSyntaxOff
\begin{document}
\edef\FileName{\GetFileName{a}{b}{c}}
FileName = "\FileName".
\edef\FileName{\GetFileName[special]{a}{b}{c}}
FileName = "\FileName".
\end{document}
答案1
我建议(遵循 Joseph Wright 的建议)在任何情况下都不要使用弃用的命令。
但是,如果您只想测试代码,您可以这样做:
\cs_if_exist:NTF \str_if_eq_x:nnTF
{ \cs_gset_eq:NN \grill_str_if_eq_x:nnTF \str_if_eq_x:nnTF }
{ \cs_gset_eq:NN \grill_str_if_eq_x:nnTF \str_if_eq:xxTF }
并在您的代码中使用\grill_str_if_eq_x:nnTF
,其优点是不会使用只出现一次的弃用命令来污染您的代码。
\grill_str_if_eq_x:nnTF
当您处于测试阶段之外时,使用“官方”命令可以轻松更改所有出现的事件。
请不要在生产代码中使用弃用的函数:在某些情况下,不仅名称会发生变化,语法或函数的工作方式也会发生变化。例如,序列过去从零开始索引,现在从一开始,维护旧样式的版本将是一场噩梦。