我有一个显示子序列的命令,我定义如下:
\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}
然而,这有两个问题:
- 它会影响整个文档。我不知道如何将间距修改限制在特定的表达式上;
- 我想我不应该在任何情况下都依赖于操作员之间的间距
\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]}}$
对于第二个版本,你得到