我很惊讶,只需在命令定义中添加一个可选参数,结合 即可改变公式中的间距\mathcolor
。为什么会发生这种情况?如何修复?
梅威瑟:
\documentclass{article}
\usepackage{xcolor}
%MINIMAL EXAMPLE:
\newcommand{\optionalSub}[2][a]{_{#2}}
\newcommand{\noOptionalSub}[1]{_{#1}}
%other example:
\newcommand{\coloredSubscript}[2][red]{_{\mathcolor{#1}{#2}}}
\begin{document}
%MINIMAL EXAMPLE:
$a^b\optionalSub{c}$ %correct spacing
$\mathcolor{blue}{a^b}\optionalSub{c}$ % very wrong spacing
$\mathcolor{blue}{a^b}\noOptionalSub{c}$ %correct spacing
%other example:
$a^b\coloredSubscript{c}$ %correct spacing
$\mathcolor{blue}{a^b}\coloredSubscript{c}$ %very wrong spacing
\end{document}
总结一下:\mathcolor
单独使用不会影响间距(我非常欣赏这一点),添加可选参数通常也不会改变间距(我非常欣赏这一点)。但是以某种方式将它们直接放在一起使用会改变间距?为什么?
答案1
您可以使用\NewExpandableDocumentCommand
不会受到遗留系统中可选参数检查问题影响的产品\newcommand
。
\documentclass{article}
\usepackage{xcolor}
%MINIMAL EXAMPLE:
\NewExpandableDocumentCommand{\optionalSub}{O{a}m}{_{#2}}
\NewExpandableDocumentCommand{\noOptionalSub}{m}{_{#1}}
%other example:
\NewExpandableDocumentCommand{\coloredSubscript}{O{red}m}{_{\mathcolor{#1}{#2}}}
\begin{document}
%MINIMAL EXAMPLE:
$a^b\optionalSub{c}$ %correct spacing
$\mathcolor{blue}{a^b}\optionalSub{c}$ % very wrong spacing
$\mathcolor{blue}{a^b}\noOptionalSub{c}$ %correct spacing
%other example:
$a^b\coloredSubscript{c}$ %correct spacing
$\mathcolor{blue}{a^b}\coloredSubscript{c}$ %very wrong spacing
\end{document}
答案2
OpTeX 中也存在类似的问题,但与不可扩展宏给出的下一个参数无关。只需
$ {\Blue a^b}_c $
在后面给出 c a^b
(即带有空格,位置错误),因为{...}
不仅被解释为开始/结束组,而且还被解释为数学列表中的新原子。我们必须用 , 替换和{
。这些TeX 基元仅打开/关闭组,但它们不会构造数学原子。解决方案是:}
\begingroup
\endgroup
\def\mathcolor#1{\begingroup#1\endgroup}
$\mathcolor{\Blue a^b}_c$
请注意,我们不需要做任何其他事情(不需要_
像在 LaTeX 中那样检查以下内容),因为 OpTeX 使用 LuaTeX 属性设置颜色。