如果“最终用户”正在使用 LaTeX 准备文档并使用当前版本的 LaTeX(截至目前,LaTeX2e <2021-06-01> 补丁级别 1),它会自动加载 L3 编程层 <2021-10-12>,并且如果用户正在编写和应用使用 等的宏\NewDocumentCommand
,那么是否有理由:
- 包括
\usepackage{xparse}
,或 - 使用
\ExplSyntaxOn
?
例如,以下来源来自https://tex.stackexchange.com/a/393188/13492:
\documentclass{article}
\NewDocumentCommand\test{o}{\IfNoValueTF{#1}{test}{#1}}
\begin{document}
\test[hello], and \test[hello]{\ world!}
\end{document}
我当然知道,ExplSyntaxOn 和 ExplSyntaxOff 起什么作用?,但我是从文档编写者的角度提出一个实际问题,而不是从包作者或 LaTeX 开发人员的角度!
答案1
如果你知道有最新的 LaTeX 可用,那么你只需要明确使用
\usepackage{xparse}
xparse
如果您想使用已在软件包中试用但未包含在最终版本 ( ) 中的功能之一,ltcmd
该功能已合并到格式中。特别是g
参数类型。但g
很邪恶,所以希望您不需要它。
\ExplSyntaxOn
就像\makeatletter
,它从来不需要访问诸如\IfNoValueTF
您显示的命令,但就像\makeatletter
允许偶尔访问@
名称中包含的命令(在包代码而不是文档中会更好)一样,\ExplSyntaxOn
允许访问名称中包含和的命令(_
以及:
对空格的一些控制)再次访问可能在包中更好的代码,但如果需要,可以放在序言中。