【问题标题】:Using sympy's latex() function without calculating the input使用 sympy 的 latex() 函数而不计算输入
【发布时间】:2015-02-16 14:47:34
【问题描述】:

我想在不计算表达式的情况下从 sympy 表达式中获取乳胶输出。例如,如果我做 latex((2+3)/7) 输出将是 5/7(使用乳胶),但我所追求的是它只输出 (2+3)/7 和乳胶。像这样:\frac{2+3}{7}

【问题讨论】:

    标签: math python-3.x latex sympy


    【解决方案1】:

    你可以尝试用关键字evaluate=False来表示表达式:

    >>> latex(S('(2+3)/7',evaluate=False))
    '\\frac{1}{7} \\left(2 + 3\\right)'
    

    【讨论】:

    • 我有点发现了这一点,但问题是有时它会做一些奇怪的事情。例如 (2+3)/7 变成 (1/7)(2+3) 这对于我需要做的事情来说并不是最佳的。 (\frac{1}{7} \left(2 + 3\right)) 我可能会找到另一个解析 Latex 的库或编写自己的解析器。
    • 别忘了模式选项:
    • @smichr "模式选项:"??也有乳胶解析器忽略evaluate=False 的问题。有没有一种模式选项可以避免这种情况?
    【解决方案2】:

    您可以手动调整long_frac_ratio

    long_frac_ratio:分子宽度与分子宽度的允许比 在我们开始分解长分数之前分母的宽度。 默认值为 2。

    >>> latex(e,long_frac_ratio=3)
    '\\frac{2 + 3}{7}'
    

    【讨论】:

      【解决方案3】:

      (最好作为另一个答案添加)

      别忘了模式选项:

      >>> e = S('(2+3)/7', evaluate=False)
      >>> latex(e,mode='inline')
      '$\\left(2 + 3\\right) / 7$'
      >>> latex(e,mode='plain')
      '\\frac{1}{7} \\left(2 + 3\\right)'
      >>> latex(e,mode='equation')
      '\\begin{equation}\\frac{1}{7} \\left(2 + 3\\right)\\end{equation}'
      >>> latex(e,mode='equation*')
      '\\begin{equation*}\\frac{1}{7} \\left(2 + 3\\right)\\end{equation*}'
      

      【讨论】:

      • 感谢帮助,但添加模式(如您在乳胶输出中所见)仍然输出错误。 (它在 1/7 的右侧添加 (2+3) 而不是输出 (2+3)/7。还将评估设置为 false 仍然计算乘法,这也是我不想做的事情。我已经做了一种不使用 sympy 的解决方法,但我仍然对这在 sympy 中是否可行感到有点兴趣。
      【解决方案4】:

      也许您正在寻找 fold_short_frac 选项?

      >>> latex(S('(2+3)/7',evaluate=False), fold_short_frac=True)
      '\\left(2 + 3\\right) / 7'
      

      另外,不确定您对评估 = False 对 Mul 不起作用的意思。或许你可以举个例子。

      >>> S('2*3',evaluate=False)
      2*3
      >>> S('2*3/7',evaluate=False)
      2*3/7
      

      【讨论】:

      • 找出我认为它正在成倍增加的原因。我正在检查 liveshell 中的东西,这些东西似乎在输出答案时会进行计算。所以 S('2*3/7',evaluate=False) 返回 6/7,但如果我打印它,它会显示 2*3/7。 fold_short_frac 也绝对不是我想要的,因为我想使用 frac。具体来说,我的问题的答案是让 latex() 函数输出这个:\frac{2+3}{7}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      相关资源
      最近更新 更多