我怎样才能计算前导空格的数量而不是像使用那样计算所有空格的数量\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}