在数学模式中自动用空格分隔块

在数学模式中自动用空格分隔块

我有一份文档,其中的方程式包含许多数学上并非绝对必要的括号。这些括号是为了简化方程式某些块的识别而惯用的。然而,它们也给文档带来了很多噪音。我考虑用这些块周围的空格代替括号。为了实现这个想法,我想定义一个宏,它定义了一个类似于新数学原子的东西,以确保当两个新原子彼此相邻或与一个数学原子相邻时,有一个空格。然而,当这个新原子与一个数学原子、一个数学二进制原子或另一个常见的数学原子相邻时,它应该表现得像一个数学原子。

\documentclass{article}
\begin{document}
The $abc$ and $def$ are distinct blocks within the equations.
They are highlighted using brackets.
\[y = x (abc)(def) z\]
\[y = (abc) x + (def) xz\]

I would like to automatically highlight them with spaces using a macro.
The outcome should look similar to this.
\[y = x \;\, abc \;\, def \;\, z\]
\[y = abc \;\, x + def \;\, xz\]
\end{document}

答案1

编辑

通过更多测试(即使添加了额外的双括号后),当出现以下情况时答案仍然不正确:

  • 该宏后面跟着另一个类似的宏
  • 该宏后面跟着另一个运算符 ( +-, ...)

在这两种情况下,都会添加一个额外的薄空间。


原始答案

您可以\operatorname在宏的定义中使用,而不是空格,...因为当使用两个连续的这种类型的宏时,或者遇到另一个运算符( ,,,等)时,\, \;前者可以更好地控制间距。+-=

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\newcommand*{\distinctblock}[1]{{\operatorname\relax {#1} \operatorname\relax}}
%
\begin{document}
%
%
The $abc$ and $def$ are distinct blocks within the equations.
They are highlighted using \textbf{brackets}.
\[y = x (abc)(def) z\]
\[y = (abc) x + (def) xz\]

Highlighted using the custom command \textbf{distinctblock}

\[y = x \distinctblock{abc} \distinctblock{def} z\]
\[y = \distinctblock{abc} x + \distinctblock{def} xz\]
%
\end{document}

答案2

\mathinner正是我在寻找的东西。

\documentclass{article}

\newcommand{\block}[1]{\mathinner{#1}}
\begin{document}
The $abc$ and $def$ are distinct blocks within the equations.
They are highlighted using brackets.
\[y = x (abc)(def) z\]
\[y = (abc) x + (def) xz\]
\[y = x (abc) + xz (def)\]

I would like to automatically highlight them with spaces using a macro.
The outcome should look similar to this.
\[y = x \;\, abc \;\, def \;\, z\]
\[y = abc \;\, x + def \;\, xz\]
\[y = x \;\, abc + xz \;\, def \]
Hence
\[y = x \block{abc} \block{def} z\]
\[y = \block{abc} x + \block{def} xz\]
\[y = x \block{abc} + xz\block{def} \]
\end{document}

另一种实现方式\mathop会在最后一行导致问题。

相关内容