我想重新定义产品命令(,,,,\times
)以添加\cdot
\otimes
\wedge
\odot
可选负间距参数,但我不知道如何以正确的方式执行此操作。我需要新命令在未添加任何参数时\times
与旧命令保持一致,并且(或??)是带有\times
\times[?]
\times{?}
左侧添加了负空间. 如何正确做到这一点?
更具体地说,我需要新命令按以下方式工作:
a \times b
给出与旧相同的输出a \times b
。
a \time[1] b
输出结果与a \mskip-1mu \times b
a \time[2] b
输出结果与a \mskip-2mu \times b
以下是可以使用的 MWE 代码:
\documentclass[11pt,letterpaper,twoside]{book}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage{microtype}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{mathtools}
\usepackage{tensor}
\begin{document}
TEST
\begin{align}
a &\times b \\
a \mskip-1mu &\times b \\
a \mskip-2mu &\times b
\end{align}
\end{document}
答案1
您需要重新定义许多标准命令,这会使您的数学表达式非常脆弱,并且可能与其他包发生冲突并使共同作者感到困惑。
我会简单地定义类似
\newcommand\z[1]{\mskip-#1mu}
然后使用
a \z1\times b
当您想要调整间距时。(您可能希望给出一个比\z
或可能不更有意义的名称,并保持简短)
答案2
您可以抽象重新定义:
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\NewDocumentCommand{\addspacer}{m}
{
\clist_map_function:nN { #1 } \cham_addspacer:N
}
\cs_new_protected:Nn \cham_addspacer:N
{
\exp_args:Nc \NewCommandCopy { \cs_to_str:N #1 _kept } #1
\RenewDocumentCommand #1 { O{0} }
{
\mskip-##1mu
\use:c { \cs_to_str:N #1 _kept }
}
}
\ExplSyntaxOff
\addspacer{\times,\cdot,\otimes,\wedge}
\begin{document}
$a\times b$
$a\times[1]b$
$a\times[2]b$
$a\wedge b$
$a\wedge[1]b$
$a\wedge[2]b$
\end{document}