我使用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}}
来显示标签的内容
答案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}
但我不确定该软件包的下一个版本是否会有不同的内部结构。