输入长度敏感的可选参数宏

输入长度敏感的可选参数宏

我编写了以下宏,打印 C_0^*。但我想将 * 的位置稍微推高一点,因此使用了 strut。我还想要可选参数,即 C^* 和 C_0^* 可以由同一个宏处理。因此,我定义了以下内容:

\documentclass{article}
\newcommand{\objstylesf}[1]{\ensuremath{\mathsf{#1}}}
\newcommand{\chcpcti}[1][]{
    \ifx&#1&
        \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}

在此处输入图片描述

相关内容