Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ReST strikethrough

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

like image 523
gozzilli Avatar asked Jun 29 '11 09:06

gozzilli


4 Answers

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;
}
like image 197
gozzilli Avatar answered Nov 14 '22 16:11

gozzilli


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.

like image 38
marcz Avatar answered Nov 14 '22 16:11

marcz


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.

like image 14
Ville Säävuori Avatar answered Nov 14 '22 14:11

Ville Säävuori


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.

like image 5
Gregory Kuhn Avatar answered Nov 14 '22 16:11

Gregory Kuhn