文本模式与数学模式下的下划线

文本模式与数学模式下的下划线

_在文本模式下经常使用字符,因此我更改了下划线类别:\catcode\_=12,但这也适用于数学模式,现在我无法在数学模式下使用下划线制作下标。有没有办法让 latex 在文本模式下将下划线解释为下划线字符,在数学模式下将其解释为下标?

答案1

你可以让_数学变得活跃:

\AtBeginDocument{
  \catcode`_=12
  \begingroup\lccode`~=`_
  \lowercase{\endgroup\let~}\sb
  \mathcode`_="8000
}

梅威瑟:

\documentclass{article}
\usepackage[T1]{fontenc}

\AtBeginDocument{
  \catcode`_=12
  \begingroup\lccode`~=`_
  \lowercase{\endgroup\let~}\sb
  \mathcode`_="8000
}

\begin{document}
a_b $a_b$
\end{document}

在此处输入图片描述

答案2

\catcode`\_=\active
\def_{\relax\ifmmode\sb \else \_\fi}

答案3

值得一提的是,在 ConTeXt 中,特殊字符_不需要^在文本模式下转义,​​并且可以在数学模式下正常工作。

ConTeXt 表和数学对齐宏不用作&对齐标记,因此&在文本模式下也不需要转义。

答案4

下划线_已经默认情况下,数学处于活动状态:不需要明确将其数学代码设置为"8000。因此可以这样做:

\documentclass{article}
\usepackage[T1]{fontenc}

\AtBeginDocument{%
  \begingroup\lccode`~=`_%
  \lowercase{\endgroup\let~}_%
  \catcode`_=12
}

\begin{document}
a_b 

$a_b$
\end{document}

也许最好这样做JLDiaz 的回答而不是使其成为 catcode 12,使其成为 catcode ,并更改其活动定义以便仅在文本模式下13执行。\_\textunderscore

然而,这会导致标签出现问题;除非通过 Babel 服务进行激活,因为 babel 修补了各种内容以允许在标签中使用简写。

3.8但是使用 Babel (我不知道3.9)时,使用简写在数学上也是有效的,这是很危险的,因为\normal@char<char>被定义为 catcode12版本(如果在向 babel 声明为简写时它已经是 catcode 12),但在数学模式下,使用数学活动字符会造成无限循环。

因此,\catcode“_ 12”避免了这些潜在的困难。

相关内容