狮身人面像既可以定义主题,也可以定义可使用的pygments样式。
但是,我找不到一种很好的方法让Sphinx项目为pygments定义一个自定义样式(配色方案)。
来自医生们
若要使该样式可用于Pygments,您必须
据我所知,第一个选项是我想要的,因为应该可以动态地扩展pygments。虽然从检查链接,我不确定这将如何做(没有如何使用插件系统的例子)。第二个例子涉及将文件复制到pygments中,这是不切实际的,特别是因为路径可能不能被用户写入。
虽然这不是一个很好的解决方案,但我还是设法破解了一种风格:
包括完整性
# Sphinx "conf.py"
# Master toctree document
master_doc = 'contents'
# BEGIN MONKEY-PATCH
from pygments.style import Style
from pygments.token import Text, Other, Comment, Whitespace
class MyFancyStyle(Style):
background_color = "#1e1e27"
default_style = ""
styles = {
Text: "#cfbfad",
Other: "#cfbfad",
Whitespace: "#434357",
Comment: "#cd8b00",
Comment.Preproc: "#409090",
Comment.PreprocFile: "bg:#404040 #ffcd8b",
Comment.Special: "#808bed",
# ... snip (just more colors, you get the idea) ...
}
def pygments_monkeypatch_style(mod_name, cls):
import sys
import pygments.styles
cls_name = cls.__name__
mod = type(__import__("os"))(mod_name)
setattr(mod, cls_name, cls)
setattr(pygments.styles, mod_name, mod)
sys.modules["pygments.styles." + mod_name] = mod
from pygments.styles import STYLE_MAP
STYLE_MAP[mod_name] = mod_name + "::" + cls_name
pygments_monkeypatch_style("my_fancy_style", MyFancyStyle)
pygments_style = "my_fancy_style"
# END MONKEY-PATCH发布于 2018-02-05 04:23:00
在conf.py中指定要使用的Pygments样式。来自狮身人面像文件
pygments_style用于突出显示源代码的Pygments的样式名称。如果没有设置,则为HTML输出选择主题的默认样式或“sphinx”。
可以通过以下方法检索可用名称:
>>> from pygments.styles import get_all_styles
>>> styles = list(get_all_styles())一些狮身人面像主题和俾格斯风格组合的在线预览是可用的。
如果你不喜欢开箱即用的花花公子风格,那么你可以创建自定义Pygments样式.
发布于 2021-10-20 16:25:15
我就是这样设置的:
文件夹结构:
docs
├── source
│ ├── conf.py <--
│ ├── _pygments
│ │ ├── style.py <--
│ ├── _static
│ ├── ...conf.py
(在最上面)
import sys, os
sys.path.append(os.path.abspath("./_pygments"))
pygments_style = 'style.MonokaiStyle'
...style.py
from pygments.style import Style
from pygments.token import Keyword, Name, Comment, String, Error, Text, \
Number, Operator, Generic, Whitespace, Punctuation, Other, Literal
class MonokaiStyle(Style):
"""
This style mimics the Monokai color scheme.
"""
background_color = "#272822"
highlight_color = "#49483e"
styles = {
# No corresponding class for the following:
Text: "#f8f8f2", # class: ''
Whitespace: "", # class: 'w'
Error: "#960050 bg:#1e0010", # class: 'err'
Other: "", # class 'x'
...
}您可以选择预定义的样式这里 (正如我所做的那样),并将官方增资回购中的相应*.py文件放入_pygment文件夹。或者您可以定义自己的样式,根据自己的喜好重命名类(不要忘记将conf.py中的导入子句调整为新的名称)
编辑:这是用于样式查找的更好的资源。
发布于 2020-12-29 14:56:49
我也有类似的需求,尽管我真正想要的是稍微改变现有的风格(下面称为基本样式)。我能够扩展问题中的代码以满足我的需要。我把它寄给其他遇到这个问题的人。
# Sphinx "conf.py"
# Syntax highlighting of code blocks
import pygments.styles, pygments.token
def monkeypatch_pygments(name, base_name='default', attrs={}):
import importlib, sys
base_module = importlib.import_module('.'.join(['pygments', 'styles', base_name]))
def name_to_class_name(name):
return name.capitalize() + 'Style'
base_class = getattr(base_module, name_to_class_name(base_name))
styles = getattr(base_class, 'styles', {}).copy()
styles.update(attrs.pop('styles', {}))
attrs['styles'] = styles
class_name = name_to_class_name(name)
Style = type(class_name, (base_class,), attrs)
module = type(base_module)(name)
setattr(module, class_name, Style)
setattr(pygments.styles, name, module)
pygments.styles.STYLE_MAP[name] = f'{name}::{class_name}'
sys.modules['.'.join(['pygments', 'styles', name])] = module
pygments_style = 'custom' # Arbitrary name of new style
monkeypatch_pygments(
pygments_style,
'friendly', # Name of base style to use
{
# Changes to base style
'background_color': '#f6f6f6',
'styles': {
pygments.token.Comment: 'italic #688F98',
pygments.token.Name.Variable: '#d27a0a',
},
},
)在上面的示例中,使用friendly样式作为基本样式。它的'background_color'和'styles'字典中的一些项被重新定义。请注意,'styles'中未指定的项将从基样式中提取。基本样式本身没有更改。
https://stackoverflow.com/questions/48615629
复制相似问题