如何让Jupyter Notebook中Sympy长表达式输出支持水平滚动?
实现Sympy长表达式在Jupyter Notebook中水平滚动显示
当然可行!我之前处理复杂符号表达式时也碰到过这个糟心的问题——垂直滚动把Sympy精心排版的结构拆得支离破碎,非得上下翻半天才能看全表达式。换成水平滚动就完美解决了,下面分享两种实用的方法:
方法1:基于LaTeX渲染的优雅方案
Sympy的表达式可以导出为LaTeX格式,结合Jupyter的HTML渲染能力,我们可以把LaTeX内容包裹在带水平滚动样式的容器里,既能保留美观的数学排版,又支持横向滚动:
from sympy import symbols, expand, latex from IPython.display import HTML # 生成一个超长的测试表达式 x = symbols('x') long_expression = expand((x + 1)**20) # 用带水平滚动的div包裹LaTeX表达式 HTML(f'<div style="overflow-x: auto; padding: 10px;"><inline_LaTeX_Formula>{latex(long_expression)}<\inline_LaTeX_Formula></div>')
这种方法的优势是渲染效果和学术文档一致,表达式结构清晰,不会因为换行变形。
方法2:保留Sympy ASCII排版的方案
如果你更偏好Sympy原生的ASCII艺术式排版,我们可以把pretty()生成的文本捕获到字符串,再用<pre>标签保留格式,配合水平滚动容器:
from sympy import symbols, expand, pretty from IPython.display import HTML x = symbols('x') long_expression = expand((x + 1)**20) # 获取ASCII格式的表达式字符串 pretty_output = pretty(long_expression) # 包裹在带水平滚动的div中,pre标签确保排版不丢失 HTML(f'<div style="overflow-x: auto;"><pre>{pretty_output}</pre></div>')
<pre>标签会严格保留原文本的空格和换行,加上overflow-x: auto后,过长的内容只会触发横向滚动,垂直方向会自适应表达式的高度,彻底避免排版杂乱的问题。
两种方法都能完美替代默认的垂直滚动,你可以根据自己的排版偏好选择~
内容的提问来源于stack exchange,提问作者Safwan Ahmad
相关产品推荐
相关产品推荐

