sphinx, restructuredtext: set color for a single word

妖精的绣舞 提交于 2019-11-28 18:22:26

If you want to do this without being tied to html, try applying a different style than normal body text to your word.

In this example adapted from the rst2pdf manual, I apply the existing rubric style which is red in the backend that I am using:

Before red.

.. role:: rubric

I like color :rubric:`rubric`.

After red.

The actual look of the word will depend on how the style you choose is defined in the stylesheet that you use when generating your document. If you want blue text, make a blue text style and derive it from the normal text style. The stylsheet is backend-specific and you may be using the default. To print the default for rst2pdf.py, do this (from the rst2pdf manual):

rst2pdf --print-stylesheet

Continuing the example for a rst2pdf stylesheet, add this to your stylesheet to have a blue text style:

bluetext:
  parent: bodytext
  textColor: blue

In the document you can reference this style to get a blue word. Note this bit is generic, and should make blue text if you define a blue style in your html or whatever backend's stylesheet.

Before blue.

.. role:: bluetext

I like color :bluetext:`blue`.

After blue.

The generated pdf has the coloured words:

On my Sphinx-powered website, I use a combination of:

  • A restructuredText file containing roles definitions, one for each color - see .special.rst (BitBucket link)
  • A CSS file containing color rules for each role - see the first lines of hacks.css (BitBucket link)

Then, in every rST file where I need colors, I first import .special.rst at the top, either manually:

.. include:: .special.rst

Or with the rst_epilog configuration variable in Sphinx's conf.py file:

rst_epilog = "\n.. include:: .special.rst\n"

And then each role can be used easily in pure rST syntax:

This is :red:`red !` And :blue:`this part is blue`.

More details are given on this page (in French, sorry).

It works perfectly well for html output (and html-like), but not for PDF. Refer to the first answer above for producing a PDF with colors.

This works, but leaves the HTML in a separate paragraph.

.. raw:: html

    <font color="blue">Blue word,</font>

And a word without color

If anyone has a better answer, I will accept it.

Just a quick note because I landed here looking for something similar for html.

This works on Sphinx v2.0.1 for me. This uses the concept reported by @adam-matan but doesn't cause any formatting issues (i.e. the paragraph problem).

reference: reStructuredText Directives

.. role:: raw-html(raw)
   :format: html

:raw-html:`<font color="blue">Blue word,</font>` And a word without color
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!