我已经制作了这个测试 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。