更新后 Maple latex 代码出现双上标错误

更新后 Maple latex 代码出现双上标错误

由于此类错误,运行我的程序后,我的所有文件都无法再编译

  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}

相关内容