是否可以在重组文本中点击文字?
转换为HTML时,例如呈现为<strike>
标记的内容,例如:
<击> reStructuredText的撞击>
答案 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`
显示罢工文本。
答案 6 :(得分:0)
考虑到用户可能有不同的背景,因此这里没有一个适合所有人的解决方案。
如果仅在一个文件上使用它。例如,您向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.
user.define.rst
.. role:: strike
user.define.css
.strike {text-decoration: line-through;}
使用rst_prolog
,它可以在每个第一个文件上自动添加角色,但是如果您更改内容(该文件,它包含您定义的格式),那么您必须rebuild使渲染正确。
您可以创建扩展来实现它。
# 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
。
答案 7 :(得分:0)
如果在inline
,literal
或container
元素中找到匹配的类值,则使用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.