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 中正确设置,但在数学上毫无意义)。2
C_{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 变量名中使用下划线。