将 Sage 输入翻译为 Latex,无需简化

将 Sage 输入翻译为 Latex,无需简化

在 Sage 中,如果不以某种方式简化表达式,似乎无法打印其 Latex 代码。例如,\sage(x/x)应该转换为\frac{x}{x}而不是 1,请参阅 ask.sagemath 上的这个问题:http://ask.sagemath.org/question/9698/latex-function-prevent-simplification/

我解决这个问题的方法是将表达式定义为 sage 中的字符串(sagesilent在 sagetex 中使用)。然后我可以使用 将其自动转换为 sage 表达式sage_eval。为了排版原始公式,我想将其打印到 latex 文档中并将其传递给某个 latex 命令,该命令将其转换为正确的 latex 数学表达式。

那么是否有任何 latex 包可以做到这一点?如果没有,您还有其他想法来实现这一点吗?

下面是一些伪代码,试图更清楚地表达我想要的内容:

\documentclass{article}

\usepackage{sagetex}
\begin{document}
\begin{sagesilent}
  var('x')
  fs = '3 + x**2 + x/x'
  f = sage_eval(fs, locals={'x':x})
\end{sagesilent}

\sagetotex{fs} %f(x) without simplifying anything
\sagestr{f} %prints simplified f
\sagestr{diff(f,x)} % prints derivative of f

\end{document}

答案1

根据我对 Python (因此,在很大程度上,Sage) 表达式求值模型的理解,如果不使用您用字符串和 概述的内容,这通常是不可能的sage_eval。当您执行 时\sage{some_expr},Sage 将在 ...latex()上运行其功能some_expr,但要做到这一点,它首先需要对其进行求值。

符号表达式对其自身结构有足够的了解,因此该hold=True功能可以发挥作用,但对于任意的 Sage/Python 表达式来说,这并不适用。

至少目前看来,使用sage_eval似乎是完成您要做的事情的最佳方法。

答案2

这是一个有趣的想法。我认为没有一个包可以做到这一点。将它添加到 sagetex 包中是最有意义的。也许你可以请求这里Dan Drake 在哪里提供了他的电子邮件?假设我明白你想要什么,那么实现起来就很容易了。

\documentclass{article}
\usepackage{sagetex}
\begin{document}
\newcommand{\sagetotex}[1]{\ensuremath{{#1}}}
\begin{sagesilent}
  var('x')
  fs = '3 + x**2 + x/x'
  f = sage_eval(fs, locals={'x':x})
\end{sagesilent}
\noindent \ensuremath{\sagestr{fs}}\\%f(x) without simplifying 
$\sage{f}$\\ %prints simplified f
$\sage{diff(f,x)}$\\ % prints derivative of f
\sagetotex{\sagestr{fs}}
\end{document}

输出结果如下: 在此处输入图片描述

由于该字符串用于表示数学内容的函数,因此在文档开头创建一个新命令(您建议为 \sagetotex),通过坚持在数学模式下排版参数,以便使用数学字体排版所有数学内容。

相关内容