NewDocumentCommand:读取参数时出现问题

NewDocumentCommand:读取参数时出现问题

我已经制作了这个测试 latex 文档来了解 \NewDocumentCommand 的工作原理

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\test}{o}{\IfNoValueTF{#1}{test}{#1}}
\begin{document}
\test{gino}
\end{document}

但实际上有些问题,它一直给我输出“testgino”,但它应该只给我“gino”

答案1

您必须为命令提供将使用的强制参数的数量,例如:

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand\test{m}{\IfNoValueTF{#1}{test}{#1}}
\begin{document}
\test{gino}
\end{document}

这个 {m} 有所不同。

输出:

吉诺

如果您确实希望该参数是可选的,请尝试这样做:

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand\test{o}{\IfNoValueTF{#1}{test}{#1}}
\begin{document}
\test[gino]
\end{document}

可选参数需要“[]”才能读取。

另请将您的标题更改为“无法读取参数NewDocumentCommand”或可能从遇到类似问题的用户那里找到的内容。

答案2

o手段选修的参数是预期的;如果存在,则应将其括在方括号中,因此

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\test}{o}{\IfNoValueTF{#1}{test}{#1}}
\begin{document}

\test

\test[gino]

\end{document}

将打印

测试
吉诺

注意\test[gino],不是\test{gino}

这样的命令可以定义得更简洁

\NewDocumentCommand{\test}{O{test}}{#1}

也就是说,O当可选参数不存在时,将要执行的代码传递给说明符。

顺便说一句,如果#1代表强制参数(用说明符定义m),\IfNoValueTF{#1}则始终返回 false。当参数是可选的(通常是o,但不仅限于)并且不存在于宏调用的输入中时,它返回 true。

相关内容