更改特定命令中操作符周围的间距

更改特定命令中操作符周围的间距

我有一个显示子序列的命令,我定义如下:

\newcommand{\stx}[3] {\ensuremath{#1[#2\!:\!#3]}\xspace}

我最初的目的是呈现如下内容:

子序列渲染示例

问题是,为了获得所需的间距+,我必须编写如下代码:

\stx{s}{a\!+\!m}{b\!+\!n}

否则,周围的间距+太大,索引变得不清楚/不美观。但如果我想(我可能会)更改 的定义,那么这就会很成问题\stx

我想过用命令改变操作符周围的间距,就像这样

\newcommand{\tightBinOps}[1]   {\medmuskip=1mu\relax #1} 
\newcommand{\stx}[3]   {\ensuremath{#1[\tightBinOps{#2}\!:\!\tightBinOps{#3}]}\xspace}

然而,这有两个问题:

  1. 它会影响整个文档。我不知道如何将间距修改限制在特定的表达式上;
  2. 我想我不应该在任何情况下都依赖于操作员之间的间距\medmuskip或任何其他特定的措施。

我怎样才能安全地写作\tightBinOps——更重要的是,应该我写一下或者有更好的解决方案吗?


血管内皮生长因子

\documentclass{article}

\newcommand{\tightBinOps}[1]   {\medmuskip=1mu\relax #1}
\newcommand{\stxOriginal}[3]   {#1[#2\!:\!#3]}
\newcommand{\stxModified}[3]   {#1[\tightBinOps{#2}\!:\!\tightBinOps{#3}]}

\begin{document}
Too much space in $a+1$ here: $\stxOriginal{s}{a}{a+1}$

Desired space in $a+1$ here: $\stxModified{s}{a}{a+1}$.

But this affects the + operator when I use it in the same math
entry as a subsequence:

Compare:

\noindent$1+1~\stxModified{s}{a}{a+1}$\\
$1+1~\stxOriginal{s}{a}{a+1}$
\end{document}

答案1

首先,放弃\ensuremath这样做,这样做不会增加任何内容,更糟糕的是,会破坏一致的标记:数学应该被视为数学。但是,由于只有公式末尾的间距参数当前值用于整个数学列表,因此您必须将需要不同间距的特定部分框起来。

如下代码中,运算和关系符号周围的自动空格被设置为\thinmuskip,既小又不灵活。

\documentclass{article}

\makeatletter
\newcommand{\stx}[3]{\mathpalette\giusti@stx{{#1}{#2}{#3}}}
\newcommand{\giusti@stx}[2]{\giusti@stx@a{#1}#2}
\newcommand{\giusti@stx@a}[4]{%
  \mbox{%
    \medmuskip=\thinmuskip
    \thickmuskip=\thinmuskip
    $\m@th#1#2[{#3}:{#4}]$%
  }%
}
\makeatother

\begin{document}

Example subsequence: $\stx{s}{a}{b}$

Example subsequence: $\stx{s}{a}{b+1}$

Example subsequence: $\stx{s}{a+m}{b+n}$

\end{document}

在此处输入图片描述

另一方面,这样的表示法很麻烦。使用以下代码可以得到相同的输出:

\documentclass{article}

\makeatletter
\newcommand{\stx}[1]{\mathpalette\giusti@stx{#1}}
\newcommand{\giusti@stx}[2]{%
  \mbox{%
    \medmuskip=\thinmuskip
    \thickmuskip=\thinmuskip
    $\m@th#1#2$%
  }%
}
\makeatother

\begin{document}

Example subsequence: $\stx{s[a:b]}$

Example subsequence: $\stx{s[a:b+1]}$

Example subsequence: $\stx{s[a+m:b+n]}$

\end{document}

输入起来并不会更困难,而且更清晰。

如果你输入

Subscript: $A_{\stx{s}{a}{b}}$

对于第一个版本,或者

Subscript: $A_{\stx{s[a:b]}}$

对于第二个版本,你得到

在此处输入图片描述

相关内容