当我写作时
\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
(如果它们紧跟在后面)。如果它们隐藏在宏中,则无法检测到。