ReST strikethrough

2019-01-10 11:34发布

问题:

Is it possible to strike text through in Restructured Text?

Something that for example renders as a <strike> tag when converted to HTML, like: ReSTructuredText

回答1:

I checked the docs better, as suggested by Ville Säävuori, and I decided to add the strikethrough like this:

.. role:: strike
    :class: strike

In the document, this can be applied as follows:

:strike:`This text is crossed out`

Then in my css file I have an entry:

.strike {
  text-decoration: line-through;
}


回答2:

There is at least three ways of doing it:

.. role:: strike

An example of :strike:`strike through text`.

.. container:: strike

   Here the full block of test is striked through.

An undecorated paragraph.

.. class:: strike

This paragraph too is is striked through.

.. admonition:: cancelled
   :class: strike

I strike through cancelled text.

After applying rst2html you get:

<p>An example of <span class="strike">strike through text</span>.</p>
<div class="strike container">
Here the full block of test is striked through.</div>
<p>An undecorated paragraph.</p>
<p class="strike">This paragraph too is is striked through.</p>
<div class="strike admonition">
<p class="first admonition-title">cancelled</p>
<p class="last">I strike through cancelled text.</p>

You use them with a style

.strike {
  text-decoration: line-through;
}

Here I have taken the admonition directive as example but any directive that allow the :class: option would do.

As it generates a span the role directive is the only one that allow to apply your style to a part of a paragraph.

It is redundant to add a class strike to a directive also named strike, as suggest Gozzilli, because the directive name is the default class for the html output.

I have checked these syntax both with rest2html and Sphinx. But while everything works as expected with rest2html the class directive fail with Sphinx. You have to replace it with

.. rst-class:: strike

This paragraph too is is striked through.

This is only stated in a small footnote of Sphinx reSt Primer.



回答3:

According to the official spec there is no directive for strikethrough markup in ReST.

However, if the environment allows for :raw: role or you are able to write your own roles, then you can write a custom plugin for it.



回答4:

I found the other answers very helpful. I am not very familiar with Sphinx but I am using it for a project. I too wanted the strike-through ability and have got it working based on the previous answers. To be clear, I added my strikethrough role as gozzilli mentioned but I saved it inside my conf.py using the rst_prolog variable as discussed in the stack overflow thread here. This means that this role is available to all of your rest files.

I then extended the base html template as described above by creating layout.htmlwithin _templatesinside my source directory. The contents of this file are:

{% extends "!layout.html" %}
{% set css_files = css_files + ["_static/myStyle.css"] %}

This basically includes a custom css file to all your built default html docs.

Finally, in my _static directory within my source directory I included the file myStyle.css which contains:

.strike {
  text-decoration: line-through;
}

Which the other answers have already provided.

I am merely writing this answer as it wasn't obvious to me with my limited Sphinx experience which files to edit.