当我尝试使用tensor
样式文件创建多个张量索引时breqn
,遇到了此(最小)代码中显示的以下问题:
\documentclass{article}
\usepackage{breqn}
\usepackage{tensor}
\begin{document}
$\tensor{F}{_a}$
\end{document}
我收到以下错误:
ERROR: Package tensor Error: Sub/Superscript items out of order on input line 5,
--- TeX said ---
(tensor) some index tokens may now have been lost.
See the tensor package documentation for explanation.
Type H <return> for immediate help.
...
l.5 $\tensor{F}{_a}
$
--- HELP ---
From the .log file...
An index string has an extra or missing `^' or `_' token.
我怀疑这与用户如何breqn.sty
重新定义^
和_
埃格尔讨论过这里。如果我取出breqn
包,一切都会顺利编译。
我的问题是:我可以在序言中或其他地方放置一些东西,以便\tensor
在仍然使用该包的同时将功能返回给命令breqn
?
或者
有什么我可以用的吗不是样式tensor.sty
文件来创建张量
\tensor[^{ab}_c]{F}{_{def}^g_h}
,其将产生如下所示的内容:
仍在使用该breqn.sty
包吗?
答案1
该breqn
包尝试了下标和上标字符的类别代码,但它只将它们设置在\begin{document}
。我们需要将它们设置在 之前\usepackage{tensor}
。例如,下面的代码似乎有效。
\documentclass{article}
\usepackage{breqn}
\catcode`_=12
\catcode`^=12
\usepackage{tensor}
\begin{document}
$\tensor[^{ab}_c]{F}{_{def}^g_h}$
\end{document}
另外,breqn
似乎有一个错误:它留下_
的类别代码是 11,而不是 8 或 12。(但您不必担心这一点。)
答案2
也许你可以使用滕辛德包裹:
\documentclass{article}
\usepackage{breqn}
\usepackage{tensind}
\tensordelimiter{?}
\begin{document}
$?{}^{ab}_c?$$?F_{def}^{}^g_h?$
\begin{dmath}
f(x)=\frac{1}{x} \condition*{x\neq 0}.
\end{dmath}
\end{document}
答案3
它是mathstyle
一个包(包含在 中flexisym
,并flexisym
包含在 中),它扰乱了和breqn
的 catcode 。您可以使用(未记录的)选项将其关闭。似乎该包与 的主要目的无关,但我不确定。_
^
mathstyleoff
mathstyle
breqn
由于您使用了[mathstyleoff]
选项breqn
,因此您可以在包\usepackage{tensor}
之前或之后使用。breqn
但正如 Bruno 所说,在 之后的 catcode_
仍然是 11 breqn
,这是一个错误,因为expl3
和\ProvidesExplPackage
使其_
成为一个字母。因此您应该\catcode`\_=8
在包之后使用。
这是一个有效的例子:
\documentclass{article}
\usepackage{tensor}
\usepackage[mathstyleoff]{breqn}
%\catcode`\_=8 % use it for safey
\begin{document}
$\tensor[^{ab}_c]{F}{_{def}^g_h}$
\begin{dmath}
a+b=c=d
\end{dmath}
\end{document}
答案4
您可以手动排版:
\documentclass{article}
\usepackage{breqn}% http://ctan.org/pkg/breqn
\begin{document}
\begin{dmath*} \mathstrut^{ab}\mathstrut_c F\mathstrut_{def}\mathstrut^g\mathstrut_h \end{dmath*}
\end{document}
\mathstrut
tensor
拉伸到所需的垂直长度,水平宽度为零。当然,这会影响代码的可读性。但这取决于您以前在文档中使用的程度。