I have a long Sympy expression that I'd like to get printed with a horizontal scrollbar beneath it. Is it possible to do so in Jupyter? I'm able to toggle vertical scrolling but I want it to be horizontally scrollable instead. The problem with vertical scrolling is that the output of sympy.pretty_print()
gets badly distorted in my case. The output also looks ugly and the user has to scroll through the whole output unnecessarily.

- 373
- 1
- 3
- 10
4 Answers
Something similar to the np.set_printoptions(linewidth=some_large_number)
and/or np.set_printoptions(threshold=some_large_number)
approach can be useful but doesn't fix the problem if Jupyter's output window is itself too narrow.
The quickest solution I ended up with is inserting this line somewhere at the top of your notebook:
from IPython.display import display, HTML
display(HTML("<style>pre { white-space: pre !important; }</style>"))
If you want to change this setting for all of your notebooks, you'll need to mess around with the custom.css
config file for Jupyter as discussed here.
I wasted too much time figuring this out. Hopefully I can help some of you figure it out quicker!

- 2,581
- 2
- 18
- 16

- 2,571
- 18
- 24
Iterating on Eric's response slightly, here's a self-contained version that only creates horizontally-scrolling outputs when you want it to, rather than enabling it notebook-wide:
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))))

- 1,313
- 14
- 11
On hovering right below
out[]:
in notebook you see "scroll output" . On clicking anywhere in that area you get your output scrollable both horizontally and vertically.

- 6,107
- 2
- 40
- 43
-
11Clicking on that will toggle vertical scrolling, but I don't see a way for horizontal scrolling. Are we missing something? – RightmireM Sep 18 '18 at 11:48
-
Any answers here? – k_ssup Nov 25 '19 at 22:55
-
To anyone still following this: I added an answer that might help – Eric Le Fort Nov 26 '19 at 19:52
-
AMAZING! Thanks for showing me that! – Tony Fraser Mar 09 '23 at 05:42
As written by Eric, changing the white-space
property to pre
prevents automatic wrapping of output cells, and thus forces an horizontal scrollbar for all wide outputs of the current notebook.
Unfortunately, changing this property also prevents automatic wrapping when editing input cells, which is particularly annoying when editing markdown cells. Even worse: this behavior is not limited to the current notebook, but happens on all open tabs when using JupyterLab, for instance.
The workaround I propose, is to define a function to switch between the standard behavior white-space: pre-wrap
and the scrollbar behavior white-space:pre
. This simple function does the job:
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))

- 2,357
- 1
- 8
- 21
-
This works great. Just note that *sometimes* if you deactivate scrolling with this function and then change the output again, the scrollbar will appear again. You need to run all of your cells every time you change the window if you don't want the scrollbars. – liakoyras Nov 05 '22 at 19:21
-
@liakoyras: I haven't tried with Jupyter Notebook, but when using Jupyter Lab, I have never observed this behavior. Do you have a downloadable notebook that presents such a bug? – sciroccorics Nov 06 '22 at 14:44
-
Unfortunately not. It happened for a few times but then the behavior was normal. Don't have the time to test it more now. – liakoyras Nov 06 '22 at 15:48