自动生成的乳胶出现双下标错误

自动生成的乳胶出现双下标错误

Sagemath 软件自动生成的 latex 会产生错误Double subscript

我想向 sagemath 报告此问题,但首先想检查一下为什么会出现这种情况

在 Linux 上的 sagemath 中,我输入

sage: var('_C0 _C1 _C2 _C3 _C4 _C5 _C6 _C7 _C8 _C9 a b c d e f g h k p q x y ');
sage: integrand=(_C3*x^2-_C4)*(3*_C3*x^2+3*_C4+x)/x/((_C3*x^2+_C0*x+_C4)/(_C3*x^2+_C1*x+_C4))^(1/2)/(_C3^2*x^4+2*_C3*_C4*x^2+_C4^2-x^2);

sage: latex(integrand)

\frac{{\left(3 \, _{C_{3}} x^{2} + 3 \, _{C_{4}} + x\right)} {\left(_{C_{3}} x^{2} - _{C_{4}}\right)}}{{\left(_{C_{3}}^{2} x^{4} + 2 \, _{C_{3}} _{C_{4}} x^{2} + _{C_{4}}^{2} - x^{2}\right)} x \sqrt{\frac{_{C_{3}} x^{2} + _{C_{0}} x + _{C_{4}}}{_{C_{3}} x^{2} + _{C_{1}} x + _{C_{4}}}}}

然后我复制上面的latex并编译它

\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\[
\frac{{\left(3 \, _{C_{3}} x^{2} + 3 \, _{C_{4}} + x\right)} {\left(_{C_{3}} x^{2} - _{C_{4}}\right)}}{{\left(_{C_{3}}^{2} x^{4} + 2 \, _{C_{3}} _{C_{4}} x^{2} + _{C_{4}}^{2} - x^{2}\right)} x \sqrt{\frac{_{C_{3}} x^{2} + _{C_{0}} x + _{C_{4}}}{_{C_{3}} x^{2} + _{C_{1}} x + _{C_{4}}}}}
\]

\end{document}

使用lualatex foo2.tex给予

(./foo2.aux) (/usr/local/texlive/2021/texmf-dist/tex/latex/base/ts1cmr.fd)
! Double subscript.
<argument> {\left (_{C_{3}}^{2} x^{4} + 2 \, _{C_{3}} _
                                            {C_{4}} x^{2} + _{C_{4}}^{2} - x^{2
l.10 ...}}{_{C_{3}} x^{2} + _{C_{1}} x + _{C_{4}}}}}

?

我的问题是:您是否认为这是 sagemath latex 生成中的一个错误,它应该更智能地处理输入?因为输入是 sagemath 本身内部的有效代码,并且可以处理。只有在生成 Latex 表示时我才会收到此错误。

生成的乳胶应如何避免这个错误?

参考

为什么我会得到双下标错误

使用This is LuaHBTeX, Version 1.13.2 (TeX Live 2021)

更新

正如以下答案所推荐的那样,一个功能被添加到 sagemath 中以改善其生成的乳胶

答案1

将我的评论转换为答案:

问题的根源...+ 2 \, _{C_{3}} _{C_{4}}似乎是来自您输入的这一部分: 。显然,sagetex 变量名中下划线的存在是有效的语法。然而,考虑到TeX 中+2*_C3*_C4的特殊含义,这是一个糟糕的选择。_

如果我进去手动将违规行为更改_{C_{4}{_{C_{4}}(添加额外的括号),它会编译但不会产生合理的输出。所有C变量以下标形式呈现,因此,在分母的开头,上面_{C_{3}}^{2}的排版(在 LaTeX 中正确设置,但在数学上毫无意义)。2C_{3}

\documentclass{article}
\begin{document}
\[
\frac{{\left(3 \, _{C_{3}} x^{2} + 3 \, _{C_{4}} + x\right)} 
{\left(_{C_{3}} x^{2} - _{C_{4}}\right)}}{{\left(_{C_{3}}^{2} x^{4} + 
2 \, _{C_{3}} {_{C_{4}}} x^{2} + _{C_{4}}^{2} - x^{2}\right)} x 
\sqrt{\frac{_{C_{3}} x^{2} + _{C_{0}} x + _{C_{4}}}{_{C_{3}} x^{2} + 
_{C_{1}} x + _{C_{4}}}}}
\]
\end{document}

在此处输入图片描述

原帖指出输入也是自动生成的。但我的观点是,有人在某个地方选择使用下划线作为变量名的一部分。这是一个大错误。

如果您能够让 sagetex 在\_转换为 LaTeX 时将变量名称中的所有下划线转换为,那么输出至少在那时是有意义的,尽管我仍然发现下划线的存在不自然。这更像是一个功能请求,而不是错误报告。

\documentclass{article}
\begin{document}
\[
\frac{{\left(3 \, \_{C_{3}} x^{2} + 3 \, \_{C_{4}} + x\right)} 
{\left(\_{C_{3}} x^{2} - \_{C_{4}}\right)}}{{\left(\_{C_{3}}^{2} x^{4} + 
2 \, \_{C_{3}} \_{C_{4}} x^{2} + \_{C_{4}}^{2} - x^{2}\right)} x 
\sqrt{\frac{\_{C_{3}} x^{2} + \_{C_{0}} x + \_{C_{4}}}{\_{C_{3}} x^{2} + 
\_{C_{1}} x + \_{C_{4}}}}}
\]
\end{document}

在此处输入图片描述

然而,从长远来看,我建议不要在 sagetex 变量名中使用下划线。

相关内容