使用以下函数,我该如何定义\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 为止,阅读文档的最佳位置
\NewDocumentCommand
是xparse.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}