LaTeX3 文本/字符串比较 xstring 的替代品

LaTeX3 文本/字符串比较 xstring 的替代品

尝试更新我大学的 LaTeX 论文课程(在等待实际学位时,为了好玩)。几年来一直没动过。

无论如何,它的其中一个命令如下:

% TODO: See if the new LaTeX3 can handle this without "xstring" package
\usepackage{xstring} % Needed for "checkboxYesNo" command
\newcommand{\checkboxYesNo}[2]{
    %% #1--Find This;  #2--Search This List
    %% Outputs a Checked or Unchecked box 
    \lowercase{\def\myList{#2}}%
    \lowercase{\def\findMe{#1}}%
    \IfSubStr{\myList}{\findMe}{\checkYes}{\checkNo}%
    % \IfSubStr{\myList}{\findMe}{Yes \findMe - \myList}{No \findMe - \myList}%
}

正如您所看到的,该TODO说明中有一条关于消除对包的依赖的评论xstring,我不确定新的 LaTeX3 项目是否可以做到这一点。

\checkYes只是\checkNo调用绘制清单中选中或未选中框的 TikZ 图片的函数。

编辑:正如 egreg 指出的那样,我忘记了例子(对不起!咖啡还没有开始……)

\checkboxYesNo{t}{iar}\checkboxYesNo{a}{#6}其中是任意顺序或大写#6的字母组合。tair

基本上,该函数会检查 #2 参数是否包含 #1 参数中的字母。如果包含,它会启动命令,\checkYes否则它会进入导致问题的命令\checkNo\IfSubStr{\myList}{\findMe}{\checkYes}{\checkNo}

编辑:添加半 MWE

\ExplSyntaxOn
\NewDocumentCommand{\checkboxYesNo}{vv}
{
  \prg_generate_conditional_variant:Nnn \str_if_in:nn {ee} { TF, T, F }
  \str_if_in:eeTF { \str_foldcase:n { #2 } } { \str_foldcase:n { #1 } } {Yes} {No}
}
\ExplSyntaxOff

\checkboxYesNo{a}{abc}生产Yes同时\checkboxYesNo{q}{abc}返回No

答案1

类似物是expl3\IfSubStr

\str_if_in:nnTF

但你想要不区分大小写的比较,所以你需要插入\str_foldcase:n。因此你首先需要ee的变体\str_if_in:nnTF

\prg_generate_conditional_variant:Nnn \str_if_in:nn {ee} { TF, T, F }

你可以用以下方法进行测试

\str_if_in:eeTF { \str_foldcase:n { #2 } } { \str_foldcase:n { #1 } } { \checkYes } { \checkNo }

(测试第二个参数是否是第一个参数的子字符串)。

相关内容