将每行逐字读入序列变量

将每行逐字读入序列变量

我想创建一个“环境”(即分隔解析器),逐行读取并将它们存储在序列变量中。

我尝试使用 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可能是这里最好的长期修复:我怀疑您不是唯一希望做这样的事情的用户。

相关内容