Python、数学和 Latex:显示 + 计算?

Python, Math, and Latex: Display + Compute?

假设我有一族依赖于变量 n 的方程。我想做的是编写一个简单的代码,这样只需选择一个特定的 n,它就会生成该特定 n 值的方程式。

这是我在 ipython 上编写的代码示例。它将显示我选择的任何 n 的谐波级数的部分和(不对其求值)。

from IPython.display import display, Math, Latex

txt = ""
n = 100000
long = 0
for i in range(n):
    if (i<3 or i > n -3):
        str = "+\dfrac{{1}}"
        temp = "{0}".format(i+2)
        str +="{"+temp+"}"
        txt+=str
    else:
        if long == 0:
            txt +="+..."
            long+=1
    txt +="$"
display(Math(txt))

这会生成以下输出:

当然,我可以将我的 n 调整为我想要的任何值。

这段代码的编写方式并不能很好地适应其他类型的表达式。而且我还希望有 " = ::无论值是我想要的精度::"

在 ipython 或 latex 上有没有聪明的方法来做到这一点?

从 Python 生成 LaTeX 方程没有什么特别困难的。只是你必须转义字符串中的 \str.format 中的 {} 这样的事实让它有点乏味。

您可以使用列表理解、列表连接和字符串的 join 方法将您的示例减少到三行代码。

In [1]: tmp = ['\dfrac{{1}}{{{:.1f}}}'.format(float(n)) for n in range(2, 12)]

In [2]: sl = ['$s'] + tmp[:3] + ['...'] + tmp[-3:]

In [3]: sl
Out[3]: 
['$s',
 '\dfrac{1}{2.0}',
 '\dfrac{1}{3.0}',
 '\dfrac{1}{4.0}',
 '...',
 '\dfrac{1}{9.0}',
 '\dfrac{1}{10.0}',
 '\dfrac{1}{11.0}']

In [4]: ' + '.join(sl) + '$'
Out[4]: '$s + \dfrac{1}{2.0} + \dfrac{1}{3.0} + \dfrac{1}{4.0} + ... + \dfrac{1}{9.0} + \dfrac{1}{10.0} + \dfrac{1}{11.0}$'

为了计算表达式的结果并对其进行格式化,我编写了一个名为 TeXcalc 的模块。从 Python 表达式开始,它使用 eval 来计算它们的结果,并使用 ast 模块将它们格式化为 LaTeX。请记住,使用 eval 使其不适用于不受信任的输入。

更新:

可以像这样为 +/- 使用字符串格式;

In [1]: '{:+d}'.format(1)
Out[1]: '+1'

In [2]: '{:+d}'.format(-1)
Out[2]: '-1'