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'
假设我有一族依赖于变量 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'