这次我有一个接受字符串的函数,它将测试最后一个破折号后给出的颜色是否属于给定的颜色集。虽然我可以为其设计一个正则表达式,但我似乎太笨了,无法访问我期望存储在中的结果l_IconAndColor_seq
。
\documentclass{standalone}
\ExplSyntaxOn
\NewDocumentCommand{\ColorNameChopper}{m}
{
\my_colornamechopper:n { #1 }
}
\seq_new:N \l_IconAndColor_seq
\cs_new:Nn \my_colornamechopper:n
{
#1: & \regex_extract_once:nnNTF
{\A(.*)-(Black|White)\Z}
{#1}
\l_IconAndColor_seq
{TRUE & \seq_item:Nn \l_IconAndColor_seq {2} & \seq_item:Nn
\l_IconAndColor_seq {3} &
\seq_count:N \l_IconAndColor_seq}
{FALSE}\\
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{lllll}
String & Found & First & Second & Size\\
\ColorNameChopper{Test-Black}
\ColorNameChopper{Test-White}
\ColorNameChopper{Test-Orange}
\end{tabular}
\end{document}
我可能正在为一些简单的事情而苦苦挣扎,但我看不到它,而且序列长期以来都是空的:
答案1
您正在表格单元格中设置序列并尝试在另一个单元格中使用它。
此外,你想使用最后的序列中的项目。
第一个问题可以通过在使用前扩展内容来解决。另一个问题可以通过使用项目-1来解决
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\ColorNameChopper}{m}
{
\tobibs_colornamechopper:n { #1 }
}
\seq_new:N \l__tobibs_colornamechopper_seq
\cs_new_protected:Nn \tobibs_colornamechopper:n
{
#1: &
\regex_extract_once:nnNTF {(.*)-(Black|White)} {#1} \l__tobibs_colornamechopper_seq
{
\use:e
{
TRUE &
\seq_item:Nn \l__tobibs_colornamechopper_seq {-2} &
\seq_item:Nn \l__tobibs_colornamechopper_seq {-1} &
\seq_count:N \l__tobibs_colornamechopper_seq
}
}
{FALSE}
\\
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{lllll}
String & Found & First & Second & Size\\
\ColorNameChopper{Test-Black}
\ColorNameChopper{Test-White}
\ColorNameChopper{Test-Orange}
\ColorNameChopper{Test-again-Black}
\end{tabular}
\end{document}
它是如何以及为什么工作的?首先,您的命令\regex_extract_once:nnNTF
在表格单元格中设置序列,因此一旦 TeX 处理&
(排版时),该值就会丢失。
但是,如果我们在处理表格行之前构建整个表格行,则值不会丢失(扩展发生在与排版不同的级别,因此 TeX 不会“看到” &
,因为它只是扩展宏而不是构建表格。是的,表格很难管理。