我定义了一个FZ
用于定义数学符号的命令:
\newcommand{\FZ}[1]{\textcolor{blue}{\ensuremath{#1}}\xspace}
我想CV
先定义一个符号,然后创建一些具有不同索引的变体CV_D
,例如CV_{D,\,\mathrm{Gr}}
......
为了保持一致,我尝试将其定义为“逐步”,但随后我遇到了间距问题。请参阅最小示例:
- 我怎样才能更
D
接近CV
“直接”排版的黑色版本? - 我怎样才能让“Gr”与索引“D”处于相同的高度?
最小示例:
\documentclass{scrbook}
\usepackage{color, xspace}
\newcommand{\FZ}[1]{\textcolor{blue}{\ensuremath{#1}}\xspace}
\newcommand{\CV}{\FZ{CV}}
\newcommand{\CvD}{\FZ{\CV{}^{*}_{D}}}
\newcommand{\CvDGr}{\FZ{\CvD_{,\,\mathrm{Gr}}}}
\begin{document}
\CV
\CvD
wish: $CV_D$
\CvDGr
wish: $CV^{*}_{D,\,\mathrm{Gr}}$
\end{document}
答案1
在数学模式下{ }
生成一个新的数学对象(据我所知它实际上叫法不同,但我不记得正确的名字了),它会影响下标和上标的位置。
{{...}_{D}}_{\,Gr}
与 完全不同{...}_{D\,Gr}
。
将它放在颜色宏中也会产生一些影响。请注意,您\FZ
多次使用 int \CvDGr
。我只会展平宏定义。如果您真的想要“一致性”,那么恕我直言,您需要一些不包含\FZ
并以参数形式接受更多材料的宏:
\documentclass{scrbook}
\usepackage{color, xspace}
\newcommand{\FZ}[1]{\textcolor{blue}{\ensuremath{#1}}\xspace}
\newcommand{\cv}{CV}
\newcommand{\CV}{\FZ{\cv}}
\newcommand{\cvd}[1]{\cv^{*}_{D#1}}
\newcommand{\CvD}{\FZ{\cvd{}}}
\newcommand{\CvDGr}{\FZ{\cvd{,\,\mathrm{Gr}}}}
\begin{document}
\CV
\CvD
wish: $CV_D$
\CvDGr
wish: $CV^{*}_{D,\,\mathrm{Gr}}$
\end{document}
答案2
我的立场是绝不用于\ensuremath
产生数学符号的命令,这也可以解决\xspace
问题。
\newcommand{\FZ}{\textcolor{blue}}
\newcommand{\CV}{\FZ{CV}}
\newcommand{\CvD}{\FZ{CV^{*}_{D}}}
\newcommand{\CvDGr}{\FZ{CV^{*}_{D,\,\mathrm{Gr}}}}
您的“D”之所以\CvD
离得很远,是因为您插入了空的子公式{}
;“Gr”不在同一个下标中,所以它被视为一个空公式的下标,因此它有点凸起,因为“D”被上标的存在向下推了。
现在 $\CV$、$\CvD$ 和 $\CvDGr$ 都可以正常工作。如果你真的想要\ensuremath
,把它放在颜色命令外面:
\newcommand{\FZ}[1]{\ensuremath{\textcolor{blue}{#1}}\xspace}
事实上,\textcolor{blue}{x}
在数学模式下也能起作用,产生一个普通符号;因为你的对象是普通符号,所以没有问题。