错误:带有下标校正的 newtxmath 和 tensor 包

错误:带有下标校正的 newtxmath 和 tensor 包

编译以下最小损坏示例

\documentclass{article}
\usepackage{newtxtext}
\usepackage[subscriptcorrection]{newtxmath}
%\usepackage[lite,subscriptcorrection]{mtpro2}
\usepackage{tensor}
\begin{document}
Consider the following:
\[
A_f = R\indices{_\mu^{\sigma\nu}}
\]
\end{document}

导致以下错误消息:

! Package tensor Error: Sub/Superscript items out of order on input line 9, 
(tensor)                some index tokens may now have been lost.

See the tensor package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.9 A_f = R\indices{_\mu^{\sigma\nu}}

? 

但是,如果

  • 使用\usepackage{newtxmath},即不带 subscriptcorrection; 或
  • 一个使用\usepackage[lite]{mtpro2}; 或
  • 一个人用\usepackage[lite,subscriptcorrection]{mtpro2}

这是怎么回事?有办法解决这个问题吗?

添加:我注意到和都是 newtxmath通过 激活下划线来 mtpro2实现的(尽管更有可能是受到了的启发 )。subscriptcorrection_newtxmathmtpro2


PS 如果使用,则工作输出\usepackage[lite,subscriptcorrection]{mtpro2}

使用 mtpro2 的 MWE

答案1

tensor包使用一系列\ifx比较来确定给定了哪种类型的索引。当然,如果加载时的 catcode _(和^)与使用时的 catcode 相同,则此方法有效。但是,此处序言中的 catcode与文档正文不同:使用 math-active 时,其 catcode 设置为 12 而不是 8。最简单的解决方法是使用正确的 catcode 进行加载:tensor\indices__tensor

\documentclass{article}
\usepackage{newtxtext}
\usepackage[subscriptcorrection]{newtxmath}
\catcode`\_=12 %
\usepackage{tensor}
\catcode`\_=8 %
\begin{document}
Consider the following:
\[
A_f = R\indices{_\mu^{\sigma\nu}}
\]
\end{document}

推测该mtpro2包会立即设置 catcode _:该newtxmath包会延迟直到文档开始。

一个稍微更花哨的版本,可以自动设置 catcode:

\documentclass{article}
\usepackage{newtxtext}
\usepackage[subscriptcorrection]{newtxmath}
\makeatletter
\edef\savedcodes{\catcode`\noexpand\_=\the\catcode`\_}
\edef\@tempa{\csname [email protected]\endcsname}
\def\@tempb{{subscriptcorrection}}
\expandafter\expandafter\expandafter
  \in@\expandafter\@tempb\expandafter{\@tempa}
\ifin@
  \catcode`\_=12 %
\fi
\makeatother
\usepackage{tensor}
\savedcodes
\begin{document}
Consider the following:
\[
A_f = R\indices{_\mu^{\sigma\nu}}
\]
\end{document}

相关内容