使用 cs_new:Nn 定义新命令时出现 xparse 错误:“kernel/missing-colon”

使用 cs_new:Nn 定义新命令时出现 xparse 错误:“kernel/missing-colon”

我将简单展示一下发生了什么:

https://i.stack.imgur.com/rSOf0.png

documentclass 定义位于文件的其他位置。我正在使用 TeXnicCenter,因此交互模式不是一种选择。

答案1

存在多个错误:

命名expl3约定明确指出(参见手册第 3.2 节expl3手册链接档案链接):

3.2 正式命名语法

我们现在将更详细地研究这些名称的语法。

LATEX3 中的函数名称由三部分组成:

\<module>_<description>:<arg-spec>

这意味着:不是可选的而是强制性的,即使对于没有任何参数的宏也是如此。module和 的description内容是“任意的”,因为它们应该是唯一的并且遵循通常的命名约定。

还引入:了,以便明确区分functionvariable类似\l_tmpa_seq等。

因此使用\cs_new:Nn \hello_internal: {...}\cs_new_nopar:Nn \hello_internal: {}(以前建议用于没有参数的宏)。

另一个问题是\hello:无法在区域外访问\ExplSyntaxOn...\ExplSyntaxOff,因为它\hello:会被解释为\hello后面跟着一个:令牌,但\hello这里没有定义的命令。

要访问某些“包装器”(或“导入器”)的功能,expl3必须定义宏。

但是可以使用“普通”宏名expl3,其p语法如下:

简短示例:

\cs_new:Npn \mynicecommand #1#2 { Foo~from~#1~and~#2 }

采用哪种方法取决于实际需求(和偏好)。

\documentclass{article}

\usepackage{xparse}


\ExplSyntaxOn

\cs_new_nopar:Nn \hello_internal: {hello}
\cs_new:Nn \helloother_internal: {hello~other}


\newcommand{\hello}{%
  \hello_internal:
}

\newcommand{\helloother}{%
  \helloother_internal:
}

\ExplSyntaxOff

\begin{document}
\hello

and

\helloother
\end{document}

在此处输入图片描述

相关内容