我正在从另一种源语言输出 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
或者,如果这不是真正的数学,而你只是使用数学模式来获得上标功能(如果你想要等宽文本,这似乎是可能的),请使用