该xparse
包提供了定义由单个特殊开始/结束字符分隔的命令的可能性。这可能非常有用,例如它在physics
包中被大量使用。我想知道是否还可以定义由其他结构(例如\{
、\|
或 )分隔的命令\langle
。奇怪的是,它似乎几乎开箱即用:
看起来括号被正确识别了,但是插入了一些额外的字符。为什么会发生这种情况?有办法解决吗?
\documentclass[12pt]{standalone}
\usepackage{xparse}
\NewDocumentCommand{\testA}{d\{\}}{ \IfNoValueTF{#1}{error}{(#1)} }
\NewDocumentCommand{\testB}{d\|\|}{ \IfNoValueTF{#1}{error}{(#1)} }
\NewDocumentCommand{\testC}{d\langle\rangle}{ \IfNoValueTF{#1}{error}{(#1)} }
\begin{document}
$ \testA\{X\} \testB\|X\| \testC\langle X\rangle $
\end{document}
答案1
参数说明符d
和后面D
应该跟两个人物,而不是任意的标记。
如果你启用了在测试程序时应始终使用的检查,例如
\documentclass[12pt]{standalone}
\usepackage[log-declarations]{xparse}
\NewDocumentCommand{\testA}{d\{\}}{ \IfNoValueTF{#1}{error}{(#1)} }
\NewDocumentCommand{\testB}{d\|\|}{ \IfNoValueTF{#1}{error}{(#1)} }
\NewDocumentCommand{\testC}{d\langle\rangle}{ \IfNoValueTF{#1}{error}{(#1)} }
\begin{document}
$ \testA\{X\} \testB\|X\| \testC\langle X\rangle $
\end{document}
你收到了警告
LaTeX3 Warning: Argument delimiter '\{' for the command '\testA' should be a
(LaTeX3) single character.
LaTeX3 Warning: Argument delimiter '\}' for the command '\testA' should be a
(LaTeX3) single character.
LaTeX3 Warning: Argument delimiter '\|' for the command '\testB' should be a
(LaTeX3) single character.
LaTeX3 Warning: Argument delimiter '\|' for the command '\testB' should be a
(LaTeX3) single character.
LaTeX3 Warning: Argument delimiter '\langle ' for the command '\testC' should
(LaTeX3) be a single character.
LaTeX3 Warning: Argument delimiter '\rangle ' for the command '\testC' should
(LaTeX3) be a single character.
这些可能是实际错误。这些情况下的行为是不可预测的。