![更新后 Maple latex 代码出现双上标错误](https://linux22.com/image/460400/%E6%9B%B4%E6%96%B0%E5%90%8E%20Maple%20latex%20%E4%BB%A3%E7%A0%81%E5%87%BA%E7%8E%B0%E5%8F%8C%E4%B8%8A%E6%A0%87%E9%94%99%E8%AF%AF.png)
由于此类错误,运行我的程序后,我的所有文件都无法再编译
Double superscript. \left(-x^{2}+1\right) y^{\prime}^{2}
我最近没有更新 TeXlive。上次更新大约是 5-7 周前。
我昨天确实更新了 Maple,然后运行了由 Maple 生成 Latex 的程序。
现在,当我尝试编译生成的 latex 时,我得到了上述错误。我不确定发生了什么。我确实知道是 Maple 的 latex() 导致了这个问题,还是我在 TL 中所做的更新导致了这个问题。
这是 MWE
\documentclass[12pt]{book}
\usepackage{breqn}
\usepackage{amsmath}
\begin{document}
\begin{dmath*}
\left(-x^{2}+1\right) y^{\prime}^{2} = 1-y^{2}
\end{dmath*}
\end{document}
似乎 lualatex 抱怨y^{\prime}^{2}
>lualatex foo.tex
This is LuaHBTeX, Version 1.15.1 (TeX Live 2023/dev)
restricted system commands enabled.
(./foo.tex
LaTeX2e <2022-11-01> patch level 1
L3 programming layer <2022-12-17>
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/book.cls
Document Class: book 2022/07/02 v1.4n Standard LaTeX document class
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/bk12.clo))
(/usr/local/texlive/2022/texmf-dist/tex/latex/breqn/breqn.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3kernel/expl3.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/l3backend/l3backend-luatex.def))
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsmath.sty
For additional information on amsmath, use the `?' option.
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amstext.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsgen.sty))
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsbsy.sty)
(/usr/local/texlive/2022/texmf-dist/tex/latex/amsmath/amsopn.sty))
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphicx.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/keyval.sty)
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/graphics.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics/trig.sty)
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-cfg/graphics.cfg)
(/usr/local/texlive/2022/texmf-dist/tex/latex/graphics-def/luatex.def)))
(/usr/local/texlive/2022/texmf-dist/tex/latex/breqn/flexisym.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/breqn/cmbase.sym)
(/usr/local/texlive/2022/texmf-dist/tex/latex/breqn/mathstyle.sty))
(/usr/local/texlive/2022/texmf-dist/tex/latex/tools/calc.sty)) (./foo.aux)
(/usr/local/texlive/2022/texmf-dist/tex/latex/base/ts1cmr.fd)
(/usr/local/texlive/2022/texmf-dist/tex/context/base/mkii/supp-pdf.mkii
[Loading MPS to PDF converter (version 2006.09.02).]
) (/usr/local/texlive/2022/texmf-dist/tex/latex/epstopdf-pkg/epstopdf-base.sty
(/usr/local/texlive/2022/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
! Double superscript.
<recently read> \mathsup
l.12 \left(-x^{2}+1\right) y^{\prime}^{2}
= 1-y^{2}
?
以下是使用其 latex() 命令生成上述内容的 Maple 代码
interface(version)
Standard Worksheet Interface, Maple 2022.2, Windows 10, October
latex:-Settings(useimaginaryunit=i,
usecolor = false,
powersoftrigonometricfunctions= mixed, ## computernotation,
leavespaceafterfunctionname = true,
cacheresults = false,
spaceaftersqrt = true,
linelength=10000
);
Typesetting:-Unsuppress('all'); #always do this.
Typesetting:-Settings(prime=x,'typesetprime'=true); #this says to use y'(x) instead of dy/dx
Typesetting:-Suppress(y(x)); # this says to use y' and not y'(x)
ode:=(-x^2+1)*diff(y(x),x)^2 = 1-y(x)^2;
latex(ode)
给出
\left(-x^{2}+1\right) y^{\prime}^{2} = 1-y^{2}
这也是上面的屏幕截图
所以你看,我使用的正是 Maple 生成的代码。程序将 latex 复制到一个文件,然后对其进行编译。
我的问题是:这是 Maple latex() 命令问题吗?我应该向 Maplesoft 报告以修复吗?我不知道昨晚更新 Maple 之前 latex 是否是这样生成的。我会尝试找出答案。
同时,我是否可以采取一些措施来解决这个问题,而无需编辑实际生成的乳胶,可能是通过在序言中添加一些内容?我无法编辑乳胶,因为它都是自动生成的,我可以编辑序言并在那里添加宏来解决问题。
更新
我查看了昨晚更新之前由 Maple 生成的旧 Latex,这是它为同一方程生成的
\left(-x^{2}+1\right) \left(y^{\prime}\right)^{2} = 1-y^{2}
与当前版本相比
\left(-x^{2}+1\right) y^{\prime}^{2} = 1-y^{2}
所以这是 Maple 的错。上面的第一个版本编译成功,并给出
因此,看起来 Maple 生成的 latex 中发生了一些变化。我会向 Maplesoft 报告。
答案1
我建议你更换
\left(-x^{2}+1\right) y^{\prime}^{2} = 1-y^{2}
和
\left(-x^{2}+1\right) {y^{\prime}}^{2} = 1-y^{2}
或者更好的是,
(-x^{2}+1) {y'}^{2} = 1-y^{2}
附录回答 OP 的后续查询。如果我正确理解了您的评论,您正在寻找一种将y^{\prime}^{2}
“即时”替换为 的方法{y'}^{2}
。由于您似乎正在使用 LuaLaTeX [不错的选择!],此方法可能包括设置一个使用 Lua 内置字符串函数的 Lua 函数,并使其充当输入流上的预处理器。
% !TEX TS-program = lualatex
\documentclass{article}
%% copy the remainder of this preamble into your preamble
\usepackage{luacode} % for \luaexec macro
%% Lua-side code: Define a Lua function
\luaexec{
function FixMaple ( s )
return ( s:gsub ( "y\%^{\\prime}\%^{2}" , "{y'}^2" ) )
end
}
%% LaTeX-side code: Macros to activate and de-activate the Lua function
\newcommand\FixMapleOn{%
\directlua{luatexbase.add_to_callback(
"process_input_buffer", FixMaple, "FixMaple" )}}
\newcommand\FixMapleOff{%
\directlua{luatexbase.remove_from_callback(
"process_input_buffer", "FixMaple" )}}
\begin{document}
\FixMapleOn % activate the Lua function
$\left(-x^{2}+1\right) y^{\prime}^{2} = 1-y^{2}$
\end{document}