使用空格作为分隔符创建序列

使用空格作为分隔符创建序列

expl3吞掉空格,但我想知道使用空格作为分隔符来构建序列。因此,如果我想在每个项目后打印“!”,则输出应该是“简单句仅包含一个从句!“”。

当前 MWE 给出“真的! 这! 只是! 你! 一个 ! 恐怖分子!。!。“”。

这是我的 MWE

\documentclass{article}

\usepackage{xparse,expl3}

\ExplSyntaxOn
\seq_new:N \l_style_list_seq

\NewDocumentCommand{\test}{m}
 {%
  % This won't work
  \seq_set_split:Nnn \l_style_list_seq { } {#1}

  \seq_map_inline:Nn { \l_style_list_seq }
   {
    ##1!
   }
 }
\ExplSyntaxOff

\begin{document}
 \test{A simple sentence has only one clause.}
\end{document}

答案1

编程环境中所需的空间标记可以通过以下方式指定~

\documentclass{article}

\usepackage{xparse,expl3}

\ExplSyntaxOn
\seq_new:N \l_style_list_seq

\NewDocumentCommand{\test}{m}
 {
  \seq_set_split:Nnn \l_style_list_seq { ~ } {#1}
  \seq_map_inline:Nn { \l_style_list_seq }
   {
    ##1!
   }
 }
\ExplSyntaxOff

\begin{document}

\test{A simple sentence has only one clause.}

\end{document}

在此处输入图片描述

请注意,替换文本将包含真实的空格标记,即字符代码 32 和类别代码 10,因为 TeX 对类别代码 10 标记进行了此规范化。

答案2

我知道问题是关于的expl3。但用传统方法做这件事也没什么坏处。

\documentclass{article}
\newcommand\test[1]{\testengine#1 \relax}
\def\testengine#1 #2\relax{#1!\if\relax#2\relax\else\testengine#2\relax\fi}
\begin{document}
\test{A simple sentence has only one clause.}
\end{document}

在此处输入图片描述

相关内容