How to use color in text with ReStructured Text (rst2html.py) or how to insert HTML tags without blank lines?

28,186

Solution 1

I found this method working

First, you have the role.

.. role:: red

An example of using :red:`interpreted text`

It translates into as follows.

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

Now, you have the red class, you can use CSS for changing colors.

.red {
    color:red;
}

Solution 2

Well, I am a new user now, therefore I can not comment on others answer, thanks to stackoverflow's policy here. https://meta.stackexchange.com/questions/51926/new-users-cant-ask-for-clarifications-except-as-answers

Sienkiew's answer is good, but I want to make correction about its last sentence.

There IS way to specify the style sheet in the RST file. The clue is in Prosseek's original post, that is the .. raw:: directive.

We can put following lines at the beginning of our RST file to specify its style.

.. raw:: html

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

Solution 3

The other answer here hints at what I wanted to do, but it assumes some detailed knowledge about stylesheets in docutils. Here is a a cookbook explanation:

In your RST file, declare the role once, then use it:

    .. role:: red

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

Then you need a style sheet file. First, use Python to copy the default style sheet out of the docutils package:

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

Then edit my.css to add your customizations at the end:

    .red {
            color: red;
    }

Create a docutils configuration file named "docutils.conf":

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

use rst2html.py to convert your document:

    rst2html.py my_document.rst > my_document.html

If you don't want to use docutils.conf, you can specify the style sheet every time you run rst2html:

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

AFAIK, there is no way to specify the style sheet in the RST file.

Solution 4

Works for me like this:

.. raw:: html

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

.. role:: red

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

Solution 5

Sphinx already supports colors with the s5defs.txt standard definition file intended for inclusion (but is missing the CSS file):

  1. Create/append this text to the value of rst_epilog sphinx configuration, in your docs/conf.py file:

    rst_prolog = """
    .. include:: <s5defs.txt>
    .. default-role::
    
    """
    
  2. Follow Sphinx's instructions to add a css with the colors (e.g. adopt the hack.css from @Næreen's answer):

    • Place your css file into e.g. _static/css/s4defs-roles.css;
    • append it's path into shtml_css_files sphinx configuration:

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

You may then use:

Some :red:`colored text` at last!

TIP: Read this SO if you also want the styling to appear in Latex output.

Share:
28,186
prosseek
Author by

prosseek

A software engineer/programmer/researcher/professor who loves everything about software building. Programming Language: C/C++, D, Java/Groovy/Scala, C#, Objective-C, Python, Ruby, Lisp, Prolog, SQL, Smalltalk, Haskell, F#, OCaml, Erlang/Elixir, Forth, Rebol/Red Programming Tools and environments: Emacs, Eclipse, TextMate, JVM, .NET Programming Methodology: Refactoring, Design Patterns, Agile, eXtreme Computer Science: Algorithm, Compiler, Artificial Intelligence

Updated on July 09, 2022

Comments

  • prosseek
    prosseek almost 2 years

    How can I use color with ReStructured Text? For example, **hello** translates into <strong>hello</strong>. How can I make ReStructure(rst2html.py) translate something into <font color="####">text</font>?

    I thought about ..raw:: html, but it introduces blank lines. I want to insert HTML tags without blank lines.