expl3 - 计算参数前导空格的数量

expl3 - 计算参数前导空格的数量

我怎样才能计算前导空格的数量而不是像使用那样计算所有空格的数量\str_count_spaces

具体来说,我想逐行读取内容,并且对于每一行输入,我将使用缩进来构建相应的输出。

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn
    \seq_new:N \l__pmbc_words_seq
    \tl_new:N \l__pmbc_one_temp_tl

    \NewExpandableDocumentCommand{\nbleadingsp}{m} {
        \projetmbc_nbleadingsp:n { #1 }
    }

    \cs_new:Nn \projetmbc_nbleadingsp:n {
        % ...
    }
\ExplSyntaxOff


\begin{document}

\nbleadingsp{ 1space}

\nbleadingsp{  two spaces}

\nbleadingsp{  2 * 2    spaces}

\end{document}

答案1

正如 Phelype Oleinik 和 egreg 所说,只有通过逐字读取参数才有可能,这禁止在另一个命令中使用。

v在下面的代码中,通过使用的说明符,逐字逐句地获取参数xparse

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand { \nbleadingsp } { v } 
  { \__pmbc_nbleadingsp:n { #1 } }

\cs_new_protected:Npn \__pmbc_nbleadingsp:n #1
  {
    \int_zero:N \l_tmpa_int
    \str_map_inline:nn { #1 }
      {
        \str_if_eq:nnTF { ##1 } { ~ } 
          { \int_incr:N \l_tmpa_int }
          { \str_map_break: }
      }
    \int_use:N \l_tmpa_int
  }
\ExplSyntaxOff


\begin{document}

\nbleadingsp{ 1space}

\nbleadingsp{  two spaces}

\nbleadingsp{  2 * 2    spaces}

\nbleadingsp{    four    spaces }

\end{document}

相关内容