我有一个很长的 Sympy 表达式,我想在其下方打印一个水平滚动条。在 Jupyter 中可以这样做吗?我可以切换垂直滚动,但我希望它可以水平滚动。垂直滚动的问题是,在我的例子中,
sympy.pretty_print()
的输出严重扭曲。输出看起来也很难看,用户必须不必要地滚动整个输出。
类似于
np.set_printoptions(linewidth=some_large_number)
和/或 np.set_printoptions(threshold=some_large_number)
的方法可能很有用,但如果 Jupyter 的输出窗口本身太窄,则无法解决问题。
我最终找到的最快解决方案是将这一行插入笔记本顶部的某个位置:
from IPython.display import display, HTML
display(HTML("<style>pre { white-space: pre !important; }</style>"))
如果您想更改所有笔记本的此设置,则需要按照
此处的讨论弄乱 Jupyter 的
custom.css
配置文件。
我浪费了太多时间来解决这个问题。希望我可以帮助你们中的一些人更快地弄清楚!
稍微迭代一下 Eric 的回答,这是一个独立的版本,仅在您需要时创建水平滚动输出,而不是在笔记本范围内启用它:
from IPython.display import display, HTML
from pprint import pformat
def boxprint(*args):
for arg in args:
display(HTML('<pre style="white-space: pre !important;">{}</pre>'.format(pformat(arg))))
如 Eric 所写,将
white-space
属性更改为 pre
可防止输出单元格自动换行,从而强制当前笔记本的所有宽输出使用水平滚动条。
不幸的是,更改此属性还会阻止编辑输入单元格时自动换行,这在编辑 Markdown 单元格时尤其烦人。更糟糕的是:这种行为不仅限于当前笔记本,例如在使用 JupyterLab 时,也会发生在所有打开的选项卡上。
我建议的解决方法是定义一个函数来在标准行为
white-space: pre-wrap
和滚动条行为 white-space:pre
之间切换。这个简单的函数就可以完成这项工作:
def hscroll(activate=True):
"""activate/deactivate horizontal scrolling for wide output cells"""
from IPython.display import display, HTML
style = ('pre-wrap','pre')[activate] # select white-space style
display(HTML("<style>pre {white-space: %s !important}</style>" % style))
悬停在正下方
out[]:
在笔记本中您会看到“滚动输出”。单击该区域中的任意位置,您的输出可以水平和垂直滚动。
如果您使用的是Mac,只需向右/向左滚动,它就会自动开始滚动。