是否可以在重组文本中删除文本?
<strike>
例如,在转换为 HTML 时
呈现为标签的内容,例如: ReSTructuredText
是否可以在重组文本中删除文本?
<strike>
例如,在转换为 HTML 时
呈现为标签的内容,例如: ReSTructuredText
按照 Ville Säävuori 的建议,我更好地检查了文档,我决定像这样添加删除线:
.. role:: strike
:class: strike
在文档中,这可以应用如下:
:strike:`This text is crossed out`
然后在我的css
文件中我有一个条目:
.strike {
text-decoration: line-through;
}
至少有三种方法可以做到:
.. 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
指令是唯一允许将您的样式应用于段落的一部分的指令。
正如 Gozzilli 所建议的那样,将一个类添加strike
到也名为 的指令
中是多余的strike
,因为指令名称是 html 输出的默认类。
rest2html
我已经用和Sphinx检查了这些语法。但是,虽然 指令rest2html
的一切都按预期工作,但Sphinxclass
失败。您必须将其替换为
.. rst-class:: strike
This paragraph too is is striked through.
这仅在Sphinx reSt Primer的一个小 脚注中说明。
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.
这是一个角色的 Python 定义,del
如果您想在 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>
.
我发现其他答案非常有帮助。我对 Sphinx 不是很熟悉,但我正在将它用于一个项目。我也想要删除能力,并根据之前的答案让它工作。为了清楚起见,我添加了 gozzilli 提到的删除线角色,但我使用 rst_prolog 变量将其保存在我的 conf.py 中,如堆栈溢出线程中所述。这意味着该角色可用于您的所有 REST 文件。
layout.html
然后,我通过在_templates
我的源目录中创建来扩展基本 html 模板,如上所述。这个文件的内容是:
{% extends "!layout.html" %}
{% set css_files = css_files + ["_static/myStyle.css"] %}
这基本上包括一个自定义 css 文件到您构建的所有默认 html 文档。
最后,在我的源目录中的 _static 目录中,我包含了myStyle.css
包含以下内容的文件:
.strike {
text-decoration: line-through;
}
其他答案已经提供了。
我只是在写这个答案,因为我有限的 Sphinx 经验对我来说并不明显要编辑哪些文件。
考虑到用户可能有不同的背景,所以这里没有一个适合所有人的解决方案。
如果您只在一个文件上使用它。例如,您向 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/
并会看到如下图片:
很简单,你可以在某些IDE上直接看到预览,例如PyCharm。
bellow 是为 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.
用户定义.rst
.. role:: strike
用户定义.css
.strike {text-decoration: line-through;}
使用rst_prolog
,它可以在每个 rst 文件上自动添加角色,但是如果您更改内容(该文件,它包含您定义的格式),那么您必须重新构建以使渲染正确。
您可以创建一个扩展来实现它。
# 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 ...`
完整的架构:
关于规则,你可以参考这个链接rst-roles
而且我建议你去看看docutils.parsers.rst.roles.py
。
我为此写了一个扩展。
只需pip install sphinxnotes-strike
使用:
:strike:`text`
或者
:del:`text`
显示罢工文本。
从 Docutils 0.17 开始,如果在 、 或 元素中找到匹配的类值,HTML5 编写器会使用<del>
:inline
literal
container
.. role:: del
:del:`This text has been deleted`, here is the rest of the paragraph.
.. container:: del
This paragraph has been deleted.