数学公式中文本下标大小

数学公式中文本下标大小

我使用的是 Plain TeX,而不是 LaTeX。

现在,我已经

\def\text#1{\hbox{#1}}

这适用于类似的事情

$$A + \text{foo bar}$$.

但是,不适用于以下情况:

$$\Sum_{ \text{foo} = a}$$.

我该如何解决这个问题?具体来说,我想\text以某种方式考虑当前数学字体的大小。

答案1

存在一个AMS 捆绑版本对于 Plain TeX 也是如此:

\input amstex

$$ \text{foo}^{\text{bar}^{\text{baz}}} $$

\bye

结果

答案2

这是一个使用的解决方案\mathchoice,但它对罗马字体进行硬编码,因此如果您在内部使用斜体或小型大写字母,它将与周围的文本不匹配(甚至可能是希望的)。

\def\text#1{\mathchoice
  {\hbox{\tenrm #1}}
  {\hbox{\tenrm #1}}
  {\hbox{\sevenrm #1}}
  {\hbox{\fiverm #1}}
}

$$
\text{Abcd}^{\text{Abcd}^{\text{Abcd}}}
\textstyle
\text{Abcd}^{\text{Abcd}^{\text{Abcd}}}
$$
\bye

答案3

改用\def\text#1{{\rm#1}}


答案4

如果您的\text{...}用于表示变量,那么\text所提供的可能amstex.tex不是正确的选择,因为它的参数将在公式外部的当前字体中排版。

因此,更合理的说法是

\input amstex
\define\tvar#1{\text{\it #1}}

如果您希望这些代码片段以斜体排版,而不受公式上下文的影响。如果参数中不需要空格,那么

\define\tvar#1{\italic{#1}}

就足够了。(在 AMS-TeX 中,该\define命令与 LaTeX 中的命令类似\newcommand,它不会覆盖已定义的命令。)

支持空格的纯文本定义可能是

\font\sevenit=cmti7
\scriptfont\itfam=\sevenit
\font\fiveit=cmti5
\scriptscriptfont\itfam=\fiveit
\def\tvar{\bgroup\mathcode`\ ="8000 \catcode`\ =12
  \begingroup\lccode`~=` \lowercase{\endgroup\def~{\ }}\tvari}
\def\tvari#1{\it#1\egroup}

$\tvar{Abc deff}$%_{\tvar{Abc deff}}$

该参数仍将在数学模式下排版。如果不需要空格,则

\font\sevenit=cmti7
\scriptfont\itfam=\sevenit
\font\fiveit=cmti5
\scriptscriptfont\itfam=\fiveit
\def\tvar#1{{\it#1}}

足够了。

对于获取罗马文本来说,方法完全相同,用\rm代替\it\scriptfont\scriptscriptfont已经定义)。

相关内容