我使用的是 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
已经定义)。