希望 扩展为 \text{...}

希望  扩展为 \text{...}

我写的几乎每个下标都必须用\text{..},因此,为了整洁,最好能够用例如x_<high>来代替x_\text{high}

(缩短为\t{..}就不那么美观了。)

有一个关于为此目的使用§...§符号的类似问题,因此\def从那里接受的答案给出了一个半解决方案。但问题是我需要\lt\gt映射到<并且>这不会依次展开。我不确定这里要使用什么机器。

答案1

\makeatletter
\begingroup\lccode`~=`_\lowercase{\endgroup\def~}{\extendedsb}
\def\extendedsb{\@ifnextchar<\textsb\sb}
\def\textsb<#1>{\sb{\textnormal{#1}}}
\AtBeginDocument{\catcode`_=12 \mathcode`_="8000 }
\makeatother

答案2

其实很简单。当您定义某个宏(或使用\let它来分配它)时,定义或分配左侧的当前 catcode 会固定下来,因此您可以执行以下操作:

\documentclass{article}

\usepackage{amsmath}
\let\lt=<
\let\gt=>

{
\catcode`\<=\active
\gdef<#1>{{\text{#1}}}
}
\AtBeginDocument{%
\catcode`\<=\active
}

\begin{document}
\[
A_<op>\lt B_<op>
\]
\end{document}

\AtBeginDocument部分延迟了实际的 catcode 切换,这可以帮助一些需要旧类别的包(例如使用 比较数字\ifnum)。

相关内容