Как в интерактивном режиме обновить уравнение латекса, используя значения, заданные пользователем с помощью элементов управления пользовательского интерфейса ipywidgets в Juypter? - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь отобразить многострочное уравнение, используя значения из элементов управления вводом ipywidgets FloatBox в блокноте Jupyter.Я хочу иметь возможность обновлять уравнение либо всякий раз, когда обновляются элементы управления Floatbox, либо когда пользователь нажимает кнопку для обновления уравнения.

Прежде всего, я могу отобразить уравнение в поле кода, используяфункция уценки:

x=3
y=4
Markdown("""
$$
\\begin{{align}}
\\begin{{split}}
z & =x \\times y \\\\
 & = {x} \\times {y} \\\\
 & = {z}
\end{{split}}
\end{{align}}
$$
""".format(x=x,y=y,z=x*y))

Я также могу следовать инструкциям в readthedocs ipywidgets, чтобы получить ввод с ползунка и вывести его в виде простого текста, а не в виде уравнения:

a = widgets.IntSlider(description='a')
b = widgets.IntSlider(description='b')
c = widgets.IntSlider(description='c')

def f(a, b, c):
    print('{}*{}*{}={}'.format(a, b, c, a*b*c))

out = widgets.interactive_output(f, {'a': a, 'b': b, 'c': c})

widgets.HBox([widgets.VBox([a, b, c]), out])

Тем не менее, при объединении этих двух параметров, Markdown либо просто показывает строковое представление Markdown, а не сам рендеринг ('<IPython.core.display.Markdown object>'), либо не отображается вообще (если я не заключаю команду Markdown воператор печати).

Вот комбинация двух вместе - я использовал более простое уравнение, чем приведенное выше.

Markdown('$${}\\times{}\\times{}={}$$'.format(a.value, b.value, c.value, a.value*b.value*c.value)) #outputs fine

a = widgets.IntSlider(description='a')
b = widgets.IntSlider(description='b')
c = widgets.IntSlider(description='c')


def f(a, b, c):
    print('{}*{}*{}={}'.format(a, b, c, a*b*c))

def f2(a, b, c):
   print(Markdown('${}\\times{}\\times{}={}$'.format(a, b, c, a*b*c)))

out = widgets.interactive_output(f2, {'a': a, 'b': b, 'c': c})

widgets.HBox([widgets.VBox([a, b, c]), out]) #no output.

Есть идеи?

1 Ответ

0 голосов
/ 11 сентября 2018

Кажется, что работает следующее - я думаю, что просто нужно добавить команду 'display':

from IPython.display import display

a = widgets.IntSlider(description='a')
b = widgets.IntSlider(description='b')
c = widgets.IntSlider(description='c')


def f(a, b, c):
    print('{}*{}*{}={}'.format(a, b, c, a*b*c))

def f2(a, b, c):
   print(Markdown('${}\\times{}\\times{}={}$'.format(a, b, c, a*b*c)))

def f3(a, b, c):
   display(Markdown('${}\\times{}\\times{}={}$'.format(a, b, c, a*b*c)))
out = widgets.interactive_output(f3, {'a': a, 'b': b, 'c': c})

widgets.HBox([widgets.VBox([a, b, c]), out])
...