假设出于某些“学术”目的,我想编写一些 f 型可扩展的宏(或类似的东西),并想使用其中的 expl3 的 map 函数之一,但我认为\expanded
不可用。
因此我执行以下操作...
%! TEX program = pdflatex
\documentclass{article}
\begin{document}
\ExplSyntaxOn
\cs_new:Npn \weird #1 #2 \mark #3 {
#2 \mark {#3 #1,}
}
%\pretty:o
\tl_show:o
{ \exp:w \int_step_function:nN {10} \weird \expandafter \exp_end: \use_none:n \mark {} }
\ExplSyntaxOff
\end{document}
基本上,对于#1
函数weird
作为参数接收的每个值,它会在输入流中向前搜索{}
(#3
),将其附加#1,
到它,然后恢复输入流状态。
最终结果是{1, 2, 3, …, 10}
。(粗略地说。)
在当前的 LaTeX/expl3 版本中它确实有效,但我观察到如果“上下文”部分(#2
)不是括号平衡它就会失败。
问题:这能保证工作吗?(因为在没有它的引擎上\__exp
进行模拟的函数系列确实假设支撑平衡没有改变,所以它可能是安全的......?)\expanded
或者:有没有办法在 f-like 扩展环境中使用 ✩-expandable 函数之一,并保证可以正常工作?我在这里说“f-like”,因为如果没有 token,它实际上不是 f-type 扩展\exp_end_continue_f:
,但在这里没有什么区别。
答案1
据我所知,没有使用“括号技巧”来设置使用f
-type 扩展的情况。相反,它们都是在“决定”时将“正常”标记放入输入流的情况。因此,您可以做出您希望的假设。
请注意,\expanded
现在是 LaTeX 所要求的,不久的将来也会是expl3
。到那时,我们很可能会重新审视扩展,并将所有x
-type 可扩展的函数转换为始终为f
-type(通过使用\expanded
):这意味着生活会变得简单得多。