我想创建一个“环境”(即分隔解析器),逐行读取并将它们存储在序列变量中。
我尝试使用 xparse+v
类型参数,然后在结束符上拆分解析的标记列表,如下所示:
\seq_set_split:Nxn \l__ks_verb_lines_seq { \char_generate:nn { 13 } { 12 } } { #1 }
逐字标记在哪里#1
。不幸的是,这种方法会删除行中的缩进,这使得它们不适合我的目的。
我不需要使用 xparser。
答案1
的描述\seq_set_split:Nnn
提到它会删除空格。我们可以定义一个不删除空格的简化版本。在这里,我还没有完全将其与内部分离seq
,正式我应该这样做(可以创建一个“psuedo- seq
”,然后从中设置一个真正的内部):
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\cs_new_protected:Npx \ks_set_split:Nn #1#2
{
\tl_set:Nn #1
{
\exp_not:N \__ks_set_split:w \exp_not:N \prg_do_nothing:
#2
\exp_not:N \__ks_set_split_end:
}
\tl_replace_all:Nnn #1 { \char_generate:nn { `\^^M } { 12 } }
{
\exp_not:N \__ks_set_split_end:
\exp_not:N \__ks_set_split:w \exp_not:N \prg_do_nothing:
}
\tl_set:Nx #1 { \s__seq #1 }
}
\cs_new:Npn \__ks_set_split:w #1 \__ks_set_split_end:
{ \exp_args:No \__seq_wrap_item:n {#1} }
\NewDocumentCommand \foo { +v }
{
\ks_set_split:Nn \l__ks_verb_lines_seq { #1 }
\seq_show:N \l__ks_verb_lines_seq
}
\ExplSyntaxOff
\begin{document}
\foo{some
stuff
which
is
indented}
\end{document}
对“非空间剥离”版本的功能请求\seq_set_split:Nnn
可能是这里最好的长期修复:我怀疑您不是唯一希望做这样的事情的用户。