编译以下最小损坏示例
\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
_
newtxmath
mtpro2
PS 如果使用,则工作输出\usepackage[lite,subscriptcorrection]{mtpro2}
:
答案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}