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