在数学模式下使用新定义的符号时,如何强制执行字体大小?

在数学模式下使用新定义的符号时,如何强制执行字体大小?

我定义了以下新命令:

\newcommand{\atoi}{\mathrm{\rotatebox[origin=c]{180}{$\iotaup$}}}
\newcommand{\scriptatoi}{{\scriptsize{\mathrm{\rotatebox[origin=c]{180}{$\iotaup$}}}}}

在这个公式中使用(以及其他出现 $\atoi$ 的公式):

$\psi^{\scriptatoi x\phi}_{z}  \equiv \exists y(\phi^y_x \:\&\: \forall u(\phi^u_x \rightarrow u\!=\!y) \:\&\: \psi^y_z)$

当我使用 pdflatex(来自 TeXLive 2010)排版 LaTeX 源文件时,收到以下投诉:

LaTeX 字体警告:命令 \scriptsize 在输入行 352 的数学模式下无效。

但是,如果我改为写下下面一行:

$\psi^{\atoi x\phi}_{z}  \equiv \exists y(\phi^y_x \:\&\: \forall u(\phi^u_x \rightarrow u\!=\!y) \:\&\: \psi^y_z)$

Atoi 字符显示为全尺寸,而不是上标尺寸。

写作

$\psi^{\scriptsize\atoi x\phi}_{z}  \equiv \exists y(\phi^y_x \:\&\: \forall u(\phi^u_x \rightarrow u\!=\!y) \:\&\: \psi^y_z)$

再次产生所需的排版结果,并再次产生 LaTeX 字体警告。

我怎样才能做到我想做的事,即在上标中使用新符号时,使其具有合适的上标大小,同时又不违反数学模式的字体限制?

答案1

这种构造非常简单,您可以忘记为多种尺寸重新定义它。相反,使用\text以下工具amsmath

\renewcommand{\atoi}{\text{\rotatebox[origin=c]{180}{$\iotaup$}}}

这既可以在“主线”中使用,也可以在任意级别的上标/下标中使用,并且应该产生所需的结果。

(的定义\text基于\mathchoice;看一下amstext.sty——它不是很长。)

答案2

\mathchoice您可以使用选择正确数学大小的命令:

\newcommand\atoistyle[1]{\mbox{\rotatebox[origin=c]{180}{$#1\iotaup$}}}
\newcommand\atoi{\mathchoice
  {\atoistyle\displaystyle}
  {\atoistyle\textstyle}
  {\atoistyle\scriptstyle}
  {\atoistyle\scriptscriptstyle}
}

正如 egreg 在聊天中指出的那样,这是指挥部的工作\mathpalette (详情请见此处),因此以下代码与前面的代码完全等价:

\newcommand\atoistyle[2]{\mbox{\rotatebox[origin=c]{180}{$#1\iotaup$}}}
\newcommand\atoi{\mathpalette\atoistyle\relax}

答案3

请按如下方式使用:

\newcommand\atoi{\rotatebox[origin=c]{180}{$\iotaup$}}
\newcommand\scriptatoi{\rotatebox[origin=c]{180}{$\scriptstyle\iotaup$}}

在数学模式下,字体样式是scriptstyle

相关内容