我编写了以下宏,打印 C_0^*。但我想将 * 的位置稍微推高一点,因此使用了 strut。我还想要可选参数,即 C^* 和 C_0^* 可以由同一个宏处理。因此,我定义了以下内容:
\documentclass{article}
\newcommand{\objstylesf}[1]{\ensuremath{\mathsf{#1}}}
\newcommand{\chcpcti}[1][]{
\ifx&
\objstylesf{C}\strut^{\hspace{-.8pt}*}
\else
\objstylesf{C}_{#1}\strut^{\hspace{-5pt}*}
\fi
}
\begin{document}
$\chcpcti$
$\chcpcti[0]$
$\chcpcti[1]$
$\chcpcti[\ell+1]$
\end{document}
对于前三个,它工作正常。但是,对于最后一个,* 偏移了相当多。任何硬编码(例如 -17pt)都会妨碍其他。
确切地说,我需要一个输入长度敏感的可选参数宏定义。有人能帮我吗?我想把支柱保留在那里。或者用其他方式处理上标位置也可能很好。但在这种情况下,我不喜欢默认的上标位置。
答案1
你宁愿举起星号
\documentclass{article}
\newcommand{\objstylesf}[1]{\ensuremath{\mathsf{#1}}}
\newcommand{\raisedasterisk}{\mathpalette\raiseexponent{*}}
\newcommand{\raiseexponent}[2]{\raisebox{.6\height}{$#1#2$}}
\newcommand{\chcpcti}[1][]{%
\objstylesf{C}_{#1}^{\raisedasterisk}
}
\begin{document}
$\chcpcti$
$\chcpcti[0]$
$\chcpcti[1]$
$\chcpcti[\ell+1]$
\qquad
$\mathsf{C}^{*}$
$\mathsf{C}^{*}_{0}$
$\mathsf{C}^{*}_{1}$
$\mathsf{C}^{*}_{\ell+1}$
\end{document}