ReST删除线

时间:2011-06-29 09:56:34

标签: restructuredtext strikethrough docutils

是否可以在重组文本中点击文字?

转换为HTML时,例如呈现为<strike>标记的内容,例如: <击> reStructuredText的

8 个答案:

答案 0 :(得分:41)

我按照VilleSäävuori的建议更好地检查了文档,我决定添加这样的删除线:

.. role:: strike
    :class: strike

在文档中,可以按如下方式应用:

:strike:`This text is crossed out`

然后在我的css文件中,我有一个条目:

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

答案 1 :(得分:13)

至少有三种方法:

.. 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.

申请rst2html后,你会得到:

<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>

您将它们与风格一起使用

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

这里我以admonition指令为例,但任何指令 允许:class:选项的指令。

因为它生成span role指令是唯一的指令 允许将您的样式应用于段落的一部分。

将类strike添加到也命名的指令是多余的 strike,正如Gozzilli所建议的那样,因为指令名称是默认名称 html输出的类。

我已使用rest2html Sphinx 检查了这些语法。但 虽然rest2html class .. rst-class:: strike This paragraph too is is striked through. 指令因 Sphinx 而失败。你必须用

替换它
{{1}}

这只是 中的一小部分 footnote of Sphinx reSt Primer

答案 2 :(得分:12)

According to the official spec在ReST中没有针对删除线标记的指示。

但是,如果环境允许:raw:role或者您可以编写自己的角色,那么您可以为它编写自定义插件。

答案 3 :(得分:4)

我发现其他答案非常有帮助。 我对Sphinx不是很熟悉,但我正在将它用于一个项目。我也想要通过攻击能力,并且根据以前的答案让它发挥作用。 为了清楚起见,我添加了我作为gozzilli提到的strikethrough角色,但我使用rst_prolog变量将其保存在我的conf.py中,如堆栈溢出线程here中所述。这意味着此角色可用于所有其余文件。

然后我通过在源目录中的layout.html内创建_templates来扩展基本html模板,如上所述。该文件的内容是:

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

这基本上包括所有内置默认html文档的自定义css文件。

最后,在我的源目录中的_static目录中,我包含了文件myStyle.css,其中包含:

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

其他答案已提供。

我只是在写这个答案,因为对于我有限的Sphinx经验来说,编辑文件并不明显。

答案 4 :(得分:3)

这是del角色的Python定义,如果您想在Pelican博客或Sphinx文档项目的多个页面中使用该角色,它的作用比公认的答案要好:

from docutils import nodes
from docutils.parsers.rst import roles

def deleted_role(_role, rawtext, text, _lineno, _inliner, options={}, _content=[]):
    roles.set_classes(options)
    options.setdefault('classes', []).append("del")
    return [nodes.inline(rawtext, text, **options)], []

roles.register_canonical_role('del', deleted_role)

更好的方法是扩展HTML编写器以产生适当的<del>标签,如下所示:

from docutils import nodes
from docutils.parsers.rst import roles
from docutils.writers._html_base import HTMLTranslator

class delnode(nodes.inline):
    pass

def visit_delnode(self, node):
    self.body.append(self.starttag(node, 'del', ''))
def depart_delnode(self, node):
    self.body.append('</del>')

HTMLTranslator.visit_delnode = visit_delnode
HTMLTranslator.depart_delnode = depart_delnode

def deleted_role(_role, rawtext, text, _lineno, _inliner, options={}, _content=[]):
    roles.set_classes(options)
    return [delnode(rawtext, text, **options)], []

roles.register_canonical_role('del', deleted_role)

您当然可以对其进行微调以产生<s>

答案 5 :(得分:1)

我为此写了一个扩展。
只需 pip install sphinxnotes-strike 并使用:

:strike:`text` 

显示罢工文本。

更多信息:https://sphinx-notes.github.io/strike/

答案 6 :(得分:0)

考虑到用户可能有不同的背景,因此这里没有一个适合所有人的解决方案。

1。仅一个文件

如果仅在一个文件上使用它。例如,您向PyPI发布了一个简单项目,并且可能只有一个README.rst文件。您可能需要以下内容。

.. |ss| raw:: html

    <strike>

.. |se| raw:: html

    </strike>

single line
=============

|ss| abc\ |se|\defg

multiple line
=============

|ss|  
line 1

line 2
|se|

789

您可以将其复制并粘贴到以下网站上:https://livesphinx.herokuapp.com/

,将看到以下图片:

enter image description here

这很简单,您可以直接在某些IDE(例如PyCharm)上查看预览。


bellow正在为Sphinx的用户写作

2.Sphinx初学者

如果您是Sphinx的初学者。 (我的意思是也许您想使用Sphinx创建文档,但是Python对您不熟悉),然后尝试以下操作:

# conf.py

from pathlib import Path
html_static_path = ['_static', ]
html_css_files = ['css/user.define.css']  # If you want to control which HTML should contain it, you can put it on the HTML, which is very like the answer by @Gregory Kuhn.

with open(Path(__file__).parent / Path('_static/css/user.define.rst'), 'r') as f:
    user_define_role = f.read()

rst_prolog = '\n'.join([ user_define_role + '\n',])  # will be included at the beginning of every source file that is read.
# rst_epilog = '\n'.join([ user_define_role + '\n',])  # it's ok if you put it on the end.

user.define.rst

.. role:: strike

user.define.css

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

使用rst_prolog,它可以在每个第一个文件上自动添加角色,但是如果您更改内容(该文件,它包含您定义的格式),那么您必须rebuild使渲染正确。

3。创建角色

您可以创建扩展来实现它。

# conf.py

extensions = ['_ext.rst_roles', ]
html_static_path = ['_static', ]
html_css_files = ['css/user.define.css']
# rst_roles.py
from sphinx.application import Sphinx
from docutils.parsers.rst import roles
from docutils import nodes
from docutils.parsers.rst.states import Inliner


def strike_role(role, rawtext, text, lineno, inliner: Inliner, options={}, content=[]):
    your_css_strike_name = 'strike'
    return nodes.inline(rawtext, text, **dict(classes=[your_css_strike_name])), []

def setup(app: Sphinx):
    roles.register_canonical_role('my-strike', strike_role)  # usage:  :my-strike:`content ...`

完整架构:

  • conf.py
  • _ext /
    • rst_roles.py
  • _static /
    • css /
      • user.define.css

有关规则,您可以参考此链接rst-roles

我建议您去看看docutils.parsers.rst.roles.py

答案 7 :(得分:0)

如果在inlineliteralcontainer元素中找到匹配的类值,则使用HTML5-writer的存储库版本0.17dev:

.. role:: del

:del:`This text has been deleted`, here is the rest of the paragraph.

.. container:: del

  This paragraph has been deleted.