测试字符串是否是 csv 字符串列表的一部分

测试字符串是否是 csv 字符串列表的一部分

我使用xsim带标签的包进行练习。这些标签是字符串的 CSV 列表。

year={2020-2021,2017-2018}我有一个名为 year (例如)的标签,其中包含学年。我可以使用 检索此标签\PropertyValue,我想测试“2022-2021”是否是 CSV 列表的一部分。

我想我必须以“ \if \PropertyValue”开始,但我不知道如何继续。

以下是 MWE:

\documentclass[10pt,a4paper,twoside,french]{article}

\usepackage{xsim}
\usepackage{babel}
\usepackage[most]{tcolorbox}

\DeclareExerciseTagging{year}

\DeclareExerciseEnvironmentTemplate{custom}{%
    \begin{tcolorbox}[
        width=\textwidth,
        enhanced,
        breakable,
        colbacktitle=black,
        colframe=black,
        colback=white,
        sharp corners,
        beforeafter skip=\baselineskip,
        title={\bfseries\XSIMmixedcase{\GetExerciseName}~\GetExerciseProperty{counter}\qquad\IfExerciseTagSetTF{difficulty=1}{\normalfont(Niveau 1)}{}},
        after upper=\IfInsideSolutionF{\par\hfill\GetExerciseProperty{year}}    
        ]
        }
    {\end{tcolorbox}}

\xsimsetup{
    exercise/template=custom,
    solution/template=custom,
    solution/print=true
}

\xsimsetup{solution/print=true}

\begin{document}

\begin{exercise}[year={2020-2021,2017-2018}]
    Exercice niveau 1 
\end{exercise}
\begin{solution}
    Solution de l'exercice 1
\end{solution}

\end{document}

我添加了一行after upper=\IfInsideSolutionF{\par\hfill\GetExerciseProperty{year}}来显示标签的内容

以下是 xsim 文档的屏幕截图: 在此处输入图片描述

答案1

您可以尝试使用\isintag以下语法的宏:

\isintag{tag-type}{value}\iftrue ...yes... \else ...no...\fi

例如:

\isintag{year}{2020-2021}\iftrue print YES\else print NO\fi

该宏可以这样定义:

\def\isintag#1#2\iftrue{\expandafter\let\expandafter\param
   \csname ____xsim_attribute_exercise!\csname g_xsim_exercise_id_tl\endcsname ::#1:\endcsname
   \def\test##1,#2,##2\end{\def\test{##2}\unless\ifx\test\empty}%
   \expandafter\paramcorr\param
   \expandafter\test\param#2,\end
}
\def\paramcorr#1#2{\def\param{,#2,}}

代码基于将xsim标签值保存到具有控制序列名称的宏中:

\____xsim_attribute_exercise!\g_xsim_exercise_id_tl ::tag-type:

该宏的主体格式如下:

\exp_not:n {data}

但我不确定该软件包的下一个版本是否会有不同的内部结构。

相关内容