我遇到了与定义点相关的包\NewDocumentCommand
中的命令的一个非常奇怪的行为。以下代码有效:xparse
\documentclass{article}
\usepackage{xparse}
\begin{document}
\NewDocumentCommand{\Test}{m >{\SplitList {;}}r<>}{
#1, #2
}
\Test{1}<123;32>
\end{document}
然而,如果我们将Test
定义改为序言
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\Test}{m >{\SplitList {;}}r<>}{
#1, #2
}
\begin{document}
\Test{1}<123;32>
\end{document}
失败并出现以下错误
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! LaTeX error: "xparse/missing-required"
!
! Failed to find required argument starting with '<' for command '\Test '.
!
! See the LaTeX3 documentation for further information.
!
! For immediate help type H <return>.
!...............................................
l.44 \Test{1}<
123;32>
|'''''''''''''''''''''''''''''''''''''''''''''''
| The current command '\Test ' expects an argument starting with '<'. LaTeX
| did not find it, and will insert a default value to be processed.
|...............................................
这看起来很奇怪,出乎意料。这是在https://www.overleaf.com
答案1
仅当加载西班牙语或加利西亚语模块时才会重现此问题babel
。
\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{xparse}
\NewDocumentCommand{\TestPreamble}{m >{\SplitList {;}}r<>}{#1, #2}
\begin{document}
\NewDocumentCommand{\TestDocument}{m >{\SplitList {;}}r<>}{#1, #2}
\TestPreamble{1}<123;32>
\TestDocument{1}<123;32>
\end{document}
我们得到
! LaTeX3 Error: Failed to find required argument starting with '<' for command
(LaTeX3) '\TestPreamble '.
For immediate help type H <return>.
...
l.11 \TestPreamble{1}<
123;32>
该命令\TestDocument
运行正常。
这是由于<
前后含义发生变化\begin{document}
。定义个人命令时,应始终注意加载语言定义的简写。
通过使用es-noquoting
禁用赋予的(现在相当无用的)含义的选项,可以解决这个特定问题<
。
\documentclass{article}
\usepackage[spanish,es-noquoting]{babel}
\usepackage{xparse}
\NewDocumentCommand{\TestPreamble}{m >{\SplitList {;}}r<>}{#1, #2}
\begin{document}
\NewDocumentCommand{\TestDocument}{m >{\SplitList {;}}r<>}{#1, #2}
\TestPreamble{1}<123;32>
\TestDocument{1}<123;32>
\end{document}