在我尝试去理解时,expl3
我遇到了瓶颈,我无法弄清楚如何存储函数的结果。
例如,在伪代码中我想要做的是这样的,将的第二个字符tempstring
(即字符b
)存储在otherstring
不改变的情况下tempstring
string tempstring = abcde
string otherstring = tempstring[2]
print tempstring
print otherstring
这将导致输出abcde b
在下面的expl3
代码中我相信我已经正确声明了我的变量,但是我执行操作的第 4 行不起作用。
\tl_new:N \templist
\tl_new:N \otherlist
\tl_set:Nn \templist {abcde}
\tl_set:Nn \otherlist {\tl_item:Nn \templist {2}}
\templist
\otherlist
我原本期望这abcde b
也能输出,但是没有。
但不幸的是,\otherlist = \templist
它似乎也不符合我的需要。
我也尝试过,\tl_set_eq:Nn \otherlist {\tl_item:Nn \templist {2}}
但也没有用。
我已经编辑了代码来显示一个最小的错误示例,显然我上面写的内容运行良好。
再次编辑后,我发现了我的错误。David 是正确的。在我的主代码中,我忘记了:Nn
后面的内容\tl_item
答案1
代码按照您描述的运行(最好提供显示错误的完整文档?)
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\tl_new:N \templist
\tl_new:N \otherlist
\tl_set:Nn \templist {abcde}
\tl_set:Nn \otherlist {\tl_item:Nn \templist {2}}
\ExplSyntaxOff
\templist
\otherlist
\end{document}
请注意,这定义\otherlist
为提取第二个标记。如果您希望它是该结果,请使用
\tl_set:Nx \otherlist {\tl_item:Nn \templist {2}}
b
两种情况下的视觉输出是相同的。