每次发出一个 LaTeX “token”,处理上标

每次发出一个 LaTeX “token”,处理上标

我正在从另一种源语言输出 LaTeX,但这种语言每次只给我一个源标记。因此,我可能会得到一个对应于“开始上标”的标记,然后我会得到一个对应于“结束上标”的标记。

我曾经有

\newcommand{\mybeginsup}{\begin{math}{}\sp\bgroup\tt}
\newcommand{\myendsup}{\egroup\end{math}}

(这\tt是我想要的上标样式,并且我希望它无关紧要。)

问题在于它无法处理嵌套的上标。我猜这会导致\begin{math}命令嵌套,而这才是导致“数学环境分隔符错误”错误消息的原因。

那么我该怎么做呢?

我确实尝试过:

\usepackage{ifthen}
\newcounter{embeddedmaths}
\renewcommand{\mybeginsup}{%
\ifthenelse{\value{embeddedmaths} = 0}%
{\addtocounter{embeddedmaths}{1}\begin{math}}{}\sp\bgroup\tt}
\renewcommand{\myendsup}{%
\egroup\addtocounter{embeddedmaths}{-1}%
\ifthenelse{\value{embeddedmaths} = 0}{\end{math}}{}}

尝试计算我进入数学模式的次数,但这给了

! Missing } inserted.
<inserted text> 

所以现在我陷入困境。

答案1

您可以将上标内容加框,因为您知道它必须位于\scriptstyle

对上标进行分组以便稍后处理

\documentclass{article}
\newsavebox{\supbox}% Superscript box
\newcommand{\bsup}{\begin{lrbox}{\supbox}$\tt\scriptstyle}% Superscript begin
\newcommand{\esup}{$\end{lrbox}{}^{\usebox{\supbox}}}% Superscript end
\begin{document}
$x^{\mathtt{2 5 4 a}}$ \quad % Traditional input
$x\bsup 2 5 4 a\esup$ % "Tokenized" input
\end{document}

还要注意,定义以 开头的命令\end会导致 LaTeX 出现问题,因为它通常与环境相关联。因此,我使用了\bsup\esup

答案2

\begingroup和的“简写”形式\endgroup可以在这里为您提供帮助(借用 Werner 的例子):

\documentclass{article}
\newcommand{\bsup}{^\bgroup}
\newcommand{\esup}{\egroup}
\begin{document}
$x^{\mathtt{2^{678} 5 4 a}}$ \quad % Traditional input
$x\bsup 2 \bsup 6 7 8 \esup 5 4 a\esup$ % "Tokenized" input
\end{document}

无需指定大小即可工作,因此它可以处理多级上标:

标记化上标输出的演示

答案3

如果您想避免嵌套数学问题,请使用\ensuremath{...}标准乳胶命令进入数学模式(如果您尚未进入该模式)。

\textsuperscript或者,如果这不是真正的数学,而你只是使用数学模式来获得上标功能(如果你想要等宽文本,这似乎是可能的),请使用

相关内容