使用带参数的 \NewDocumentCommand

使用带参数的 \NewDocumentCommand

使用以下函数,我该如何定义\NewDocumentCommand使用 \piston_lvsm:n

\cs_new_protected:Nn \piston_lvsm:n
  { \setlength \smallskipamount{#1} }

會是這樣嗎?

\NewDocumentCommand{\lsvm}{m}
  {
    \piston_lvsm:n {#1}
  }

答案1

从评论线索中获取问题本身及其子问题:

  • \NewDocumentCommand\foo{m}{...}定义一个带有一个强制参数的文档命令,然后可以将其传递给#1底层代码
  • 一个人不必使用expl3来使用\NewDocumentCommand,或反之亦然,尽管建议拆分文档界面和代码级宏
  • 到 TeX Live 2022 为止,阅读文档的最佳位置\NewDocumentCommandxparse.pdf;从 TeX Live 2023 开始,核心内容已移至usrguide.pdf
  • 定义的宏周围的括号是可选的:在 Lamport 的书中,全部参数在括号中给出,但作为定义的命令(\foo在我的例子中)必须是一个单一的标记,省略那些是合理的

答案2

为了回答您问题的一部分,如果可能的话,只需运行此代码并自己查看一下;)

\documentclass{article}
\ExplSyntaxOn
\cs_new_protected:Nn \piston_lvsm:n
  { \setlength \smallskipamount{#1}}
\NewDocumentCommand{\lsvm}{m}
  {
    \piston_lvsm:n {#1}
  }
\ExplSyntaxOff
\usepackage{blindtext}
\begin{document}
\blindtext
\smallskip
\blindtext
\lsvm{3cm}
\smallskip
\blindtext
\end{document}

相关内容