✩ 可扩展映射函数的“待定”部分是否保证大括号平衡?

✩ 可扩展映射函数的“待定”部分是否保证大括号平衡?

假设出于某些“学术”目的,我想编写一些 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):这意味着生活会变得简单得多。

相关内容