如何在f(x) g(y)中第一个括号后自动添加一个空格?

如何在f(x) g(y)中第一个括号后自动添加一个空格?

当我写作时

\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiter\p{\lparen}{\rparen}

\begin{document}
    \[
        w = \int f\p*{x} g\p*{\frac{y}{2}} h\p*{z}\ dx
    \]
\end{document}

我明白了

但这三个函数挤得太近了。
事实上,这很糟糕,看起来就像g是 附加到f(x)而不是 附加到(y/2)

所以我需要在 后面添加一些空格)。显然可以通过\,以下方式轻松修复:

        w = \int f\p*{x}\,g\p*{\frac{y}{2}}\,h\p*{z}\ dx

但我显然不想把代码弄得乱七八糟\,

有没有办法让右括号后的空格自动执行此操作?
(请注意,这不应影响其他情况下的行为 - 因此,例如,如果右括号后跟的是符号而不是其他函数,则右括号后的间距应保持与原来相同+。)

答案1

\mathinner在后面的数学命令原子前添加一个空格,但通常在二元或关系运算符前设置空格:

\documentclass{article}
\usepackage{mleftright}
\usepackage{mathtools}

\makeatletter
\DeclarePairedDelimiter\p{\lparen}{%
  \rparen
  % the math atom before is expected to be a `\mathclose`,
  % then we need to cancel the space between `\mathclsoe`
  % and `\mathinner` that is added in non-script styles.
  \@ifnextchar{,}{}{%
  \@ifnextchar{;}{}{%
  \@ifnextchar{\colon}{}{%
    \nonscript\!%
    \mathinner{}%
  }}}%
}
\makeatother

\begin{document}
    % automatic space setting:
    \[
        w\p*{y} = \int f\p*{x} g\p*{\frac{y}{2}} + h\p*{z}, i\p*{z} dx
    \]
    % manual space setting:
    \[
        w(y) = \int f(x)\,g\mleft(\frac y2\mright) + h(z), i(z)\,dx
    \]
\end{document}

结果

评论:

  • \mathinner不会在\scriptstyle或中添加空格\scriptscriptstyle(数学运算符/ 之前除外\mathop)。这可能是一个限制或功能(更紧凑的下标)。

  • 添加了对标点符号,, ;,的支持\colon(如果它们紧跟在后面)。如果它们隐藏在宏中,则无法检测到。

相关内容