Sphinx 可以用字符替换令牌吗?

Can Sphinx replace a token with a character?

我正在使用 Sphinx 和 Markdown 编写一些关于纸牌游戏的文档。我正在以这种方式生成西装图像

<style>
red{
    color:red;
    font-size: 1.25em;
}
black{
    color:black;
    font-size: 1.25em;
}
</style>

Spades is <black>&#9824;</black>
Hearts is <red>&#9829;</red> 
Diamonds is <red>&#9830;</red>
Clubs is <black>&#9827;</black>

这很难阅读(在源代码中)也很难编写。

如果我可以输入一个标记(例如 $spades$)并将其转换为

,那就简单多了
<black>&#9824;</black>

关于输出。

有谁知道这是否可行,或者是否有人可以建议解决方法?

我通过编写自己的 post 处理器解决了这个问题

我创建了自己的脚本 makehtml,它在源目录中查找文件 postprocess.py,如果存在,它会运行它

make html

FILE=source/postprocess.py
if [ -f "$FILE" ];
then
    python $FILE
fi

然后 post 处理器用 Sphinx 创建的 html 文件中的正确值替换已定义标记的所有实例。

"""Post processor for Sphinx make html."""
import os
TOKENS = {
    '$spades$': '<black>&#9824;</black>',
    '$hearts$': '<red>&#9829;</red>',
    '$diamonds$': '<red>&#9830;</red>',
    '$clubs$': '<black>&#9827;</black>',
}


def get_file_list(dir_name, ext=''):
    """Return the list of files in a directory."""
    file_list = os.listdir(dir_name)
    files = []
    for file_path in file_list:
        if not ext or file_path.endswith(ext):
            files.append(file_path)
    sorted_files = sorted(files)
    return sorted_files


print('postprocessing started')

build_dir = 'build/html'
files = get_file_list(build_dir, 'html')
for file in files:
    updated = False
    file_path = os.path.join(build_dir, file)
    with open(file_path, 'r') as f_html:
        text = f_html.read()
        for token, value in TOKENS.items():
            if token in text:
                text = text.replace(token, value)
                updated = True
    if updated:
        with open(file_path, 'w') as f_html:
            f_html.write(text)

print('postprocessing complete')

然后在custom.css

red{
    color:red;
    font-size: 1.25em;
}

black{
    color:black;
    font-size: 1.25em;
}