在 \ExplSyntaxOn 中使用数学命令

在 \ExplSyntaxOn 中使用数学命令

我正在尝试使用包定义新命令xparse。具体来说,我正尝试将积分从此简化\int\limits_{a}^{b}\ f(x)\ \mathrm{d}x为更易于阅读的形式\dint[a,b]{f(x)}{x}

我有代码,\ExplSyntax这样我就可以用它\use_i来访问我的第一个参数的元素[a,b],这些元素\SplitArgument被拆分成一个列表。我现在面临的问题是,它\use_i似乎在里面不起作用\limits;代码运行良好,没有使用,\limits所以我的实现\use_i应该没问题,如果我省略,代码也会运行\use_i,因此\Explsyntaxenv 只使用两个不同的封闭参数而不是组合参数。

我目前正在使用的代码:

\documentclass{scrartcl}
\usepackage{xparse}

% Version 1, preferred but does not work
\ExplSyntaxOn
\NewDocumentCommand{\dint}{>{\SplitArgument{1}{,}}r[] m m}{%
    \int\limits_{\use_i:nn#1}^{\use_ii:nn#1}\ #2\ \mathrm{d}#3%
}
\ExplSyntaxOff

% Version 2, does run but is just to narrow down the error
\ExplSyntaxOn
\NewDocumentCommand{\dintt}{>{\SplitArgument{1}{,}}r[] m m}{%
    \int \use_i:nn#1^{\use_ii:nn#1}\ #2\ \mathrm{d}#3%
}
\ExplSyntaxOff

% Version 3, works but 
\NewDocumentCommand{\dinttt}{r[] r[] m m}{%
    \int\limits_{#1}^{#2}\ #3\ \mathrm{d}#4%
}

\begin{document}
%    Example 1: \( \dint[a,b]{f(x)}{x} \) % Fails with error
    
    Example 2: \( \dintt[a,b]{f(x)}{x} \) % works, but is just for testing
    
    Example 3: \( \dinttt[a][b]{f(x)}{x} \) % Works, but slightly annoying
\end{document}

这可能是因为在Latex3环境中函数的处理方式不同吗?这是我第一次接触Latex3语法,所以请耐心等待 ;)

答案1

问题就出\limits_在第一个代码中,因为_不是下标字符。

\ExplSyntaxOn
\NewDocumentCommand{\dint}{>{\SplitArgument{1}{,}}r[] m m}
  {
    \int
    \limits
    \c_math_subscript_token   { \use_i:nn  #1 }
    \c_math_superscript_token { \use_ii:nn #1 }
    #2
    \,
    \mathrm{d}#3
 }
\ExplSyntaxOff

这两个\命令是错误的:第一个命令在积分和函数之间产生了太多空间,第二个命令在函数和微分之间产生了太多空间。

比较下图:上面是您的版本,下面是我的版本。

在此处输入图片描述

完整示例。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn
\NewDocumentCommand{\dint}{>{\SplitArgument{1}{,}}r[] m m}
  {
    \int
    \limits
    \c_math_subscript_token   { \use_i:nn  #1 }
    \c_math_superscript_token { \use_ii:nn #1 }
    #2
    \,
    \mathrm{d}#3
 }
\ExplSyntaxOff


\begin{document}

\begin{align*}
& \int\limits_{a}^b \ f(x)\ \mathrm{d}x \\
& \int\limits_{a}^b f(x)\, \mathrm{d}x \\
& \dint[a,b]{f(x)}{x}
\end{align*}

\end{document}

在此处输入图片描述

注意:\mathrm{d}即使我反对,我还是留下了可怕的东西。

相关内容