我定义了以下新命令:
\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