Restructured Textでテキストをストライクすることは可能ですか?
<strike>
たとえば、HTMLに変換されたときにタグ
としてレンダリングされるもの( ReSTructuredTextなど)
Restructured Textでテキストをストライクすることは可能ですか?
<strike>
たとえば、HTMLに変換されたときにタグ
としてレンダリングされるもの( ReSTructuredTextなど)
VilleSäävuoriによって提案されたように、ドキュメントをよりよくチェックし、次のような取り消し線を追加することにしました。
.. role:: strike
:class: strike
ドキュメントでは、これは次のように適用できます。
:strike:`This text is crossed out`
次に、私のcss
ファイルに次のエントリがあります。
.strike {
text-decoration: line-through;
}
それを行うには、少なくとも3つの方法があります。
.. 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
ディレクティブ名はhtml出力のデフォルトのクラスであるため、Gozzilliが提案するように、strike
という名前のディレクティブ
にクラスを追加するのは冗長です。strike
rest2html
これらの構文をとSphinxの両方で確認しました。しかし rest2html
、ディレクティブですべてが期待どおりに機能する一方で、 Sphinxclass
では
失敗します。あなたはそれを置き換える必要があります
.. rst-class:: strike
This paragraph too is is striked through.
これは、 SphinxreStPrimerの小さな 脚注にのみ記載されています。
公式仕様によると、 ReSTには取り消し線マークアップの指示はありません。
ただし、環境で:raw:ロールが許可されている場合、または独自のロールを作成できる場合は、そのためのカスタムプラグインを作成できます。
役割の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内に保存しました。これは、この役割がすべての残りのファイルで使用できることを意味します。
次に、ソースディレクトリlayout.html
内に作成することにより、上記のようにベースhtmlテンプレートを拡張しました。_templates
このファイルの内容は次のとおりです。
{% extends "!layout.html" %}
{% set css_files = css_files + ["_static/myStyle.css"] %}
これには基本的に、ビルドされたすべてのデフォルトのhtmlドキュメントへのカスタムcssファイルが含まれます。
最後に、ソースディレクトリ内の_staticディレクトリに、次のファイルを含めましたmyStyle.css
。
.strike {
text-decoration: line-through;
}
他の答えはすでに提供しています。
どのファイルを編集するかは私の限られたSphinxの経験では明らかではなかったので、私は単にこの答えを書いています。
ユーザーのバックグラウンドが異なる可能性があることを考慮してください。したがって、すべての人に適したソリューションは1つではありません。
1つのファイルでのみ使用する場合。たとえば、単純なプロジェクトをPyPIに公開した場合、おそらくREADME.rstファイルは1つだけです。以下が必要かもしれません。
.. |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/
写真は次のように表示されます。
シンプルで、PyCharmなどのIDEでプレビューを直接見ることができます。
以下は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
と、最初の各ファイルに役割を自動追加できますが、コンテンツ(そのファイルには、定義した形式が含まれています)を変更した場合は、レンダリングを正しくするために再構築する必要があります。
それを実現するための拡張機能を作成できます。
# 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.