我遇到了一个无法解释的奇怪行为。在我的高亮宏代码中,我尝试使用它\tl_if_in
来进行基本的数学课测试。但是当\mathrm
是要测试的标记的一部分时,会插入一些额外的标记(即后面的内容\mathrm{…}
)。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_const:Nn \c_pirkl_math_rel_symbols_tl { +-=/ }
\NewDocumentCommand{ \highlight }{ m }{
\tl_if_in:NnT \c_pirkl_math_rel_symbols_tl { #1 } {
% ...
}
#1
}
\ExplSyntaxOff
\begin{document}
Inserts what comes after \verb|\mathrm{...}|
\[ \highlight{x} + \highlight{\mathrm{d}x} \]
works with additional group
\[ \highlight{x} + \highlight{{\mathrm{d}x}} \]
\end{document}
它与 相同\clist_is_in
,只是输出中还多了一个逗号。
笔记:实际上我的问题是一种 xy 问题,我在研究捕获数学类的解决方案时遇到了这个问题:http://tex.stackexchange.com/q/369903/4918。
更新:添加\tl_to_string
测试是缓解真的…
\NewDocumentCommand{ \highlight }{ m }{
\tl_if_in:NnT \c_pirkl_math_rel_symbols_tl { \tl_to_string:n { #1 } } {
T
}
#1
}
更新2:对于大多数 TL 字符串,我也无法让它工作……
\tl_const:Nn \c_pirkl_math_rel_symbols_tl { \tl_to_string:n { +-=/ } }
\cs_generate_variant:Nn \tl_if_in:NnT { NfT }
\NewDocumentCommand{ \highlight }{ m }{
\tl_if_in:NfT \c_pirkl_math_rel_symbols_tl { \tl_to_string:n { #1 } } {
T
}
#1
}
答案1
据记载:<token list>
要搜索的不能包含{
或}
。
将两个 TL(常量和测试)都字符串化应该可以解决问题,但是这个解决方案需要两个额外的 cs 变体:
\cs_generate_variant:Nn \tl_if_in:NnT { NfT }
\tl_const:Nx \c_pirkl_math_rel_symbols_tl { \tl_to_str:n { +-=/ } }
\NewDocumentCommand{ \highlight }{ m }{
\tl_if_in:NfT \c_pirkl_math_rel_symbols_tl { \tl_to_str:n { #1 } } {
T
}
#1
}