如何使用ReStructured Text(rst2html.py)在文本中使用颜色或如何插入没有空行的HTML标签?

时间:2011-01-12 14:08:20

标签: html restructuredtext rst2html.py

如何在ReStructured Text中使用颜色?例如,**hello**会转换为<strong>hello</strong>。如何让ReStructure(rst2html.py)将某些内容翻译为<font color="####">text</font>

我想过..raw :: html,但它引入了空白行。我想插入没有空行的HTML标记。

7 个答案:

答案 0 :(得分:39)

我发现这种方法有效

首先,你有角色。

.. role:: red

An example of using :red:`interpreted text`

它转化为如下。

<p>An example of using <span class="red">interpreted text</span></p>

现在,你有了红色类,你可以使用CSS来改变颜色。

.red {
    color:red;
}

答案 1 :(得分:25)

好吧,我现在是新用户,因此我无法评论其他人的答案,这要归功于stackoverflow的政策。 https://meta.stackexchange.com/questions/51926/new-users-cant-ask-for-clarifications-except-as-answers

Sienkiew的答案很好,但我想纠正其最后一句话。

可以在RST文件中指定样式表。线索在Prosseek的原始帖子中,即.. raw :: directive。

我们可以在RST文件的开头添加以下行来指定其样式。

.. raw:: html

    <style> .red {color:red} </style>

答案 2 :(得分:10)

这里的另一个答案暗示了我想要做的事情,但它假定了一些关于docutils中样式表的详细知识。这是一本食谱说明:

在您的RST文件中,声明角色一次,然后使用它:

    .. role:: red

    This text is :red:`colored red` and so is :red:`this`

然后你需要一个样式表文件。首先,使用Python从docutils包中复制默认样式表:

    python
    import os.path
    import shutil
    import docutils.writers.html4css1 as h
    shutil.copy(os.path.dirname(h.__file__)+"/html4css1.css","my.css")

然后编辑my.css以在最后添加自定义:

    .red {
            color: red;
    }

创建名为“docutils.conf”的docutils配置文件:

    [html4css1 writer]
    stylesheet-path: my.css
    embed-stylesheet: yes

使用rst2html.py转换您的文档:

    rst2html.py my_document.rst > my_document.html

如果您不想使用docutils.conf,可以在每次运行rst2html时指定样式表:

    rst2html.py --stylesheet my.css my_document.rst > my_document.html

AFAIK,无法在RST文件中指定样式表。

答案 3 :(得分:0)

将@prosseek和@RayLuo的答案全部集中在一处-以便更轻松地找到

在RST文件的顶部,放置

.. raw:: html

    <style> .red {color:red} </style>

.. role:: red

:red:`test - this text should be red`

侧面评论:

当然,正如@sienkiew所说,许多人都希望将样式保存在单独的文件中。

但并非总是如此。

例如我是通过我希望其他用户能够运行的脚本生成上述内容的,通常是通过文件URL生成的。依赖rst2html.py已经足够糟糕-要求在配置文件中包含非标准的内容会更糟。

如果有办法为样式创建较弱的局部定义-例如“如果没有已经定义的样式.red,请使用此样式,否则使用已经定义的样式”-很好。但是AFAIK本地定义更强大。

此命令运行rst2html.py (Docutils 0.13.1 [release], Python 3.6.4, on cygwin),但其他RST工具被拒绝。

答案 4 :(得分:0)

像这样为我工作:

.. raw:: html

    <style> .red {color:#aa0060; font-weight:bold; font-size:16px} </style>

.. role:: red

:red:`test - this text should be red``

答案 5 :(得分:0)

Sphinx 已经支持颜色,其s5defs.txt standard definition file旨在用于inclusion(但缺少CSS文件):

  1. 创建此文本/将其添加到rst_epilog的值 sphinx配置,在您的docs/conf.py文件中:

    rst_prolog = """
    .. include:: <s5defs.txt>
    .. default-role::
    
    """
    
  2. 按照Sphinx's instructions添加带有颜色的CSS (例如,采用hack.css中的@Næreen's answer):

    • 将您的css文件放入例如_static/css/s4defs-roles.css;
    • 将其路径附加到shtml_css_files sphinx配置中:

      html_css_files = [
          'css/s4defs-roles.css',
      ]
      

然后您可以使用:

Some :red:`colored text` at last!

提示: 如果您还希望样式显示在 Latex 输出中,请阅读this SO

答案 6 :(得分:0)

RST文件可以用docutilsSphinx渲染(实际上,Sphinx也使用docutils。)

Sphinx

如果您需要完整的文档,请选择Sphinx。 您只需要设置一次样式,然后就可以在所有地方使用它。 与config.pyyour_cssyour_role

有关

docutils

如果您只想生成一个简单的HTML文件,我认为在下面的示例中将CSS嵌入RST更加方便

MyRST2html.py

它与rst2html.py非常相似, 我只想自己编写脚本,可以很方便地破解源代码(并从中学习更多内容),然后可以根据自己的风格定制它

# MyRST2html.py
import docutils.core
from pathlib import Path

source_path = Path('demo.rst')
destination_path = Path('output.html')

if not 'save all data':
    docutils.core.publish_file(source_path=source_path, destination=destination_path, writer_name='html')
elif 'save the body data only':
    with open(source_path, 'r', encoding='utf-8') as f:
        html_bytes: bytes = docutils.core.publish_string(f.read(), source_path, writer_name='html')
    html = html_bytes.decode('utf-8')
    html_data = html[html.find('<body>'):html.find('</body>')]
    with open(destination_path, 'w', encoding='utf-8') as f:
        f.write(html_data)
        f.write('</body>')

demo.rst

.. raw:: html

    <style>
        .red {color:red; font-weight:bold;}
        .b {color:#0000FF; background-color:white;}
    </style>

.. role:: red
.. role:: b

==========
Example
==========

.. contents::

Color
==========

:red:`R`\G\ :b:`B`

click me |RGB Colors|_

.. |RGB Colors| replace:: :red:`R`\G\ :b:`B`
.. _`RGB Colors`: https://www.w3schools.com/colors/colors_rgb.asp

output.html

<body>
<div class="document" id="example">
<h1 class="title">Example</h1>

<style>
    .red {color:red; font-weight:bold;}
    .b {color:#0000FF; background-color:white;}
</style><div class="contents topic" id="contents">
<p class="topic-title">Contents</p>
<ul class="simple">
<li><a class="reference internal" href="#color" id="id1">Color</a></li>
</ul>
</div>
<div class="section" id="color">
<h1><a class="toc-backref" href="#id1">Color</a></h1>
<p><span class="red">R</span>G<span class="b">B</span></p>
<p>click me <a class="reference external" href="https://www.w3schools.com/colors/colors_rgb.asp"><span class="red">R</span>G<span class="b">B</span></a></p>
</div>
</div>
</body>

注意

如果您的IDE是PyCharm,则可以在Editor and Preview上查看结果

enter image description here