在 expl3 语法下,[分号] 上的 SplitArgument 不起作用(重新审视)

在 expl3 语法下,[分号] 上的 SplitArgument 不起作用(重新审视)

我尝试了两种解决方案原始帖子,没有用。-NoValue-破坏了输出。

\documentclass{report}
\usepackage{xparse}

\ExplSyntaxOn

\cs_new:Nn \__erw_foo:nnn
{%
  (#1)(#2)(#3)%
}

\NewDocumentCommand{\Foo}
{>{\SplitArgument{3}{;}}mm}
{
  \__erw_foo:nnn #1 [#2]
 }

%https://tex.stackexchange.com/questions/197390/splitargument-on-colon-doesnt-work-under-expl3-syntax#comment457616_197390

 \group_begin:
\char_set_lccode:nn { `? } { `; }
\tex_lowercase:D {
  \group_end:
  \NewDocumentCommand\Qux{>{\SplitArgument{3}{?}}mm}
}{
  \__erw_foo:nnn #1 [#2]
 }

\group_begin:
\use:x{
  \group_end:
  \NewDocumentCommand\exp_not:N\Blah{>{\SplitArgument{3}{\tl_to_str:n { ; } }}mm}
}{
  \__erw_foo:nnn #1 [#2]
 }


 \ExplSyntaxOff

\begin{document}

% WANTED: (a,b)(c,d)(e)[f]

\Foo{a,b;c,d;e}{f}

\Qux{a,b;c,d;e}{f}

\Blah{a,b;c,d;e}{f}

\end{document}

更新:

但这有效:

 \NewDocumentCommand{\Baz}
{>{\SplitList{;}}mm}
{
  \__erw_foo:nnn #1 [#2]
 }

也许检查列表中是否有 3 个元素?

在此处输入图片描述

答案1

您误用了 的第一个参数\SplitArgument。第一个参数给出了分隔符在输入中,而不是项目。由于您想要有三个项目,因此需要两个分隔符,而不是三个。因此,只需将 替换\SplitArgument{3}{...}\SplitArgument{2}{...}

顺便说一下,原始帖子之所以需要 ,是因为:后面的类别代码为 11(字母)\ExplSyntaxOn,而 后面的类别代码通常为 12(其他)\ExplSyntaxOff,因此 TeX 不会将它们视为相同的字符。但是 的情况并非如此;,因此至少在您的 MWE 中不需要这些复杂性,其中 一直具有类别代码 12(其他)。这就是为什么在固定示例中和一样好用的;原因。\Foo\Qux\Blah

此外,在 régime 下,典型的行尾百分号是不需要的\ExplSyntaxOn,因为空格会被忽略。最后,我应用了符合xparse手册的格式。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\cs_new:Nn \__erw_foo:nnn
  {
    (#1)(#2)(#3)
  }

\NewDocumentCommand \Foo { >{ \SplitArgument { 2 } { ; } } m m }
  {
    \__erw_foo:nnn #1 [#2]
  }

\group_begin:
\char_set_lccode:nn { `? } { `; }
\tex_lowercase:D
  {
    \group_end:
    \NewDocumentCommand \Qux { >{ \SplitArgument { 2 } { ? } } m m }
  }
{ \__erw_foo:nnn #1 [#2] }

\group_begin:
\use:x
  {
    \group_end:
    \NewDocumentCommand \exp_not:N \Blah
      { >{\SplitArgument { 2 } { \tl_to_str:n { ; } } } m m }
  }
{ \__erw_foo:nnn #1 [#2] }


\ExplSyntaxOff

\begin{document}

\Foo{a,b;c,d;e}{f}

\Qux{a,b;c,d;e}{f}

\Blah{a,b;c,d;e}{f}

\end{document}

截屏

相关内容