diff --git a/pkgs/applications/science/math/sage/patches/sphinx-3.5-code-output.patch b/pkgs/applications/science/math/sage/patches/sphinx-3.5-code-output.patch
new file mode 100644
index 00000000000..f17897d4c89
--- /dev/null
+++ b/pkgs/applications/science/math/sage/patches/sphinx-3.5-code-output.patch
@@ -0,0 +1,13 @@
+diff --git a/src/sage/misc/sagedoc.py b/src/sage/misc/sagedoc.py
+index 6bad826a88..f4d7b8651c 100644
+--- a/src/sage/misc/sagedoc.py
++++ b/src/sage/misc/sagedoc.py
+@@ -24,7 +24,7 @@ see :trac:`12849`::
+ ....: for line in fobj:
+ ....: if "#sage.symbolic.expression.Expression.numerical_approx" in line:
+ ....: print(line)
+- numerical_approx(prec=None, digits=None, algorithm=None)...
++ numerical_approx(prec=None, digits=None, algorithm=None)...
+
+ Check that sphinx is not imported at Sage start-up::
+
diff --git a/pkgs/applications/science/math/sage/sage-src.nix b/pkgs/applications/science/math/sage/sage-src.nix
index 3051f5d5e50..57234c660a5 100644
--- a/pkgs/applications/science/math/sage/sage-src.nix
+++ b/pkgs/applications/science/math/sage/sage-src.nix
@@ -79,6 +79,13 @@ stdenv.mkDerivation rec {
# ignore a deprecation warning for usage of `cmp` in the attrs library in the doctests
./patches/ignore-cmp-deprecation.patch
+ # sphinx 3.5 pretty-prints code slightly differently than sphinx
+ # 3.1--3.3. a similar patch is available at the sphinx 4 ticket
+ # (https://trac.sagemath.org/ticket/31696), but sphinx 3.5 uses
+ # tags while sphinx 4 uses tags so we cannot just
+ # import the patch from trac.
+ ./patches/sphinx-3.5-code-output.patch
+
# remove use of matplotlib function deprecated in 3.4
# https://trac.sagemath.org/ticket/31827
(fetchSageDiff {