我试图强调xparse
并找到我尝试过但未在任何地方记录的东西。此代码片段无法编译,我不明白为什么。
\documentclass{article}
\usepackage{xparse}
\DeclareDocumentCommand\mycom{gm}{%
Optional: \IfNoValueTF{#1}{Empty}{#1}\par
Mandatory: #2}
\begin{document}
\mycom{MAN}
\mycom{OPT}{MAN}
\end{document}
根据我在文档中读到的内容,这应该会产生类似
Optional: Empty
Mandatory: MAN
Optional: OPT
Mandatory: MAN
我是否错误地阅读了文档?
答案1
在第一种情况下,找到了可选参数,因为有一个括号;然后 TeX 寻找强制参数,下一个标记是\par
(由空行生成),这会引发错误,因为强制参数不够“长”。
可选参数应该是第二个;这只是逆转测试的问题:
\documentclass{article}
\usepackage{xparse}
\DeclareDocumentCommand\mycom{mg}{%
\IfNoValueTF{#2}
{Mandatory: #1}
{Optional: #1; Mandatory: #2}}
\begin{document}
\mycom{MAN}
\mycom{OPT}{MAN}
\end{document}
不要使用g
,它更容易。