如何重新定义 \str_if_eq:xxTF 以实现向后兼容

如何重新定义 \str_if_eq:xxTF 以实现向后兼容

我今天刚刚更新了 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当您处于测试阶段之外时,使用“官方”命令可以轻松更改所有出现的事件。

请不要在生产代码中使用弃用的函数:在某些情况下,不仅名称会发生​​变化,语法或函数的工作方式也会发生变化。例如,序列过去从零开始索引,现在从一开始,维护旧样式的版本将是一场噩梦。

相关内容