下面的代码产生了-No Value-
初始输出。为什么?
\documentclass[10pt]{article}
\ExplSyntaxOn
\NewDocumentEnvironment{intfig} { > { \SplitArgument { 2 } { , } } m O{} }
{
\group_begin:
\intfig_manditoryargs #1
string\ is\ \l_intfig_astring_str \\
height\ is\ \fp_eval:n { \l_intfig_height_fp }\\
\group_end:
}{}
\str_new:N \l_intfig_astring_str
\fp_new:N \l_intfig_height_fp
\NewDocumentCommand{\intfig_manditoryargs}{ m m }
{
% Side question: why are the braces required? Without the braces, the
% variable is set to only the first character.
\str_set:Nn \l_intfig_astring_str { #1 }
\fp_set:Nn \l_intfig_height_fp { #2 }
}
\ExplSyntaxOff
\begin{document}
\begin{intfig}{random string,45.3}[ignoreme]
random body
\end{intfig}
\end{document}
答案1
随着规范的出台\SplitArgument{2}{,}
,LaTeX 期待最多参数中的两个逗号(在括号级别零处)并将它们作为三元组传递{...}{...}{...}
。
因此,如果您通过,a,b,c
您将获得{a}{b}{c}
。如果逗号少于两个,则括号将用 填充-NoValue-
。
你可能想要\SplitArgument{1}{,}
答案2
我太快回答了这个问题。答案是 \SplitArgument 需要拆分的 TOKEN 数量——上例中是逗号。因此,如果您想要两个 ARGUMENTS,那么只有一个 TOKEN。
这是合理的,也是有道理的,但这是一个明显的陷阱,xparse
文档应该指出来。