From 473718c4d46f8623785e6dd625c5f7140be1e403 Mon Sep 17 00:00:00 2001 From: jfbu Date: Sat, 13 Feb 2021 09:40:18 +0100 Subject: [PATCH 1/2] LaTeX, better workaround for a Pygments <= 2.7.4 line spacing issue Closes: #8874 Relates #4249 --- CHANGES | 2 ++ sphinx/highlighting.py | 15 +++++++++++++++ sphinx/texinputs/sphinx.sty | 11 ----------- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/CHANGES b/CHANGES index 590f0570dbe..065dbb84401 100644 --- a/CHANGES +++ b/CHANGES @@ -75,6 +75,8 @@ Bugs fixed change) with late TeXLive 2019 * #8253: LaTeX: Figures with no size defined get overscaled (compared to images with size explicitly set in pixels) (fixed for ``'pdflatex'/'lualatex'`` only) +* #8874: LaTeX: the fix to two minor Pygments LaTeXFormatter output issues ignore + Pygments style Testing -------- diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 8425009f78e..18d2f72bd81 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -8,10 +8,12 @@ :license: BSD, see LICENSE for details. """ +from distutils.version import LooseVersion from functools import partial from importlib import import_module from typing import Any, Dict +from pygments import __version__ as pygmentsversion from pygments import highlight from pygments.filters import ErrorToken from pygments.formatter import Formatter @@ -50,6 +52,19 @@ _LATEX_ADD_STYLES = r''' \renewcommand\PYGZsq{\textquotesingle} ''' +# fix extra space between lines when Pygments highlighting uses \fcolorbox +# add a {..} to limit \fboxsep scope, and force \fcolorbox use correct value +# cf pygments #1708 which makes this unneeded for Pygments > 2.7.4 +_LATEX_ADD_STYLES_FIXPYG = r''' +\makeatletter +\let\spx@original@fcolorbox\fcolorbox +\def\spx@fixpyg@fcolorbox{\fboxsep-\fboxrule\spx@original@fcolorbox} +\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+% + {\let\fcolorbox\spx@fixpyg@fcolorbox\PYG@do{#2}}} +\makeatother +''' +if tuple(LooseVersion(pygmentsversion).version) <= (2, 7, 4): + _LATEX_ADD_STYLES += _LATEX_ADD_STYLES_FIXPYG class PygmentsBridge: diff --git a/sphinx/texinputs/sphinx.sty b/sphinx/texinputs/sphinx.sty index a71c64ffca6..322d5971bdb 100644 --- a/sphinx/texinputs/sphinx.sty +++ b/sphinx/texinputs/sphinx.sty @@ -271,17 +271,6 @@ %% PYGMENTS % stylesheet for highlighting with pygments \RequirePackage{sphinxhighlight} -% fix baseline increase from Pygments latex formatter in case of error tokens -% and keep \fboxsep's scope local via added braces -\def\PYG@tok@err{% - \def\PYG@bc##1{{\setlength{\fboxsep}{-\fboxrule}% - \fcolorbox[rgb]{1.00,0.00,0.00}{1,1,1}{\strut ##1}}}% -} -\def\PYG@tok@cs{% - \def\PYG@tc##1{\textcolor[rgb]{0.25,0.50,0.56}{##1}}% - \def\PYG@bc##1{{\setlength{\fboxsep}{0pt}% - \colorbox[rgb]{1.00,0.94,0.94}{\strut ##1}}}% -}% %% TABLES From cea87d13acaa963526f8ac67efb101f2cfa53ab3 Mon Sep 17 00:00:00 2001 From: jfbu Date: Sat, 13 Feb 2021 10:20:05 +0100 Subject: [PATCH 2/2] Mention pygments_style in sphinxhighlight.sty --- sphinx/builders/latex/__init__.py | 3 ++- sphinx/highlighting.py | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/sphinx/builders/latex/__init__.py b/sphinx/builders/latex/__init__.py index dc533b48635..d8dc1aff40b 100644 --- a/sphinx/builders/latex/__init__.py +++ b/sphinx/builders/latex/__init__.py @@ -256,7 +256,8 @@ def write_stylesheet(self) -> None: with open(stylesheet, 'w') as f: f.write('\\NeedsTeXFormat{LaTeX2e}[1995/12/01]\n') f.write('\\ProvidesPackage{sphinxhighlight}' - '[2016/05/29 stylesheet for highlighting with pygments]\n\n') + '[2016/05/29 stylesheet for highlighting with pygments]\n') + f.write('% Its contents depend on pygments_style configuration variable.\n\n') f.write(highlighter.get_stylesheet()) def write(self, *ignored: Any) -> None: diff --git a/sphinx/highlighting.py b/sphinx/highlighting.py index 18d2f72bd81..ad010474e58 100644 --- a/sphinx/highlighting.py +++ b/sphinx/highlighting.py @@ -57,6 +57,7 @@ # cf pygments #1708 which makes this unneeded for Pygments > 2.7.4 _LATEX_ADD_STYLES_FIXPYG = r''' \makeatletter +% fix for Pygments <= 2.7.4 \let\spx@original@fcolorbox\fcolorbox \def\spx@fixpyg@fcolorbox{\fboxsep-\fboxrule\spx@original@fcolorbox} \def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+%