由 `\{`、`\|`、`\langle` 等分隔的命令

由 `\{`、`\|`、`\langle` 等分隔的命令

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.

这些可能是实际错误。这些情况下的行为是不可预测的。

https://github.com/latex3/latex3/issues/368

相关内容