51

Restructured Textでテキストをストライクすることは可能ですか?

<strike>たとえば、HTMLに変換されたときにタグ としてレンダリングされるもの( ReSTructuredTextなど)

4

8 に答える 8

46

VilleSäävuoriによって提案されたように、ドキュメントをよりよくチェックし、次のような取り消し線を追加することにしました。

.. role:: strike
    :class: strike

ドキュメントでは、これは次のように適用できます。

:strike:`This text is crossed out`

次に、私のcssファイルに次のエントリがあります。

.strike {
  text-decoration: line-through;
}
于 2011-07-11T15:16:03.157 に答える
16

それを行うには、少なくとも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の小さな 脚注にのみ記載されています。

于 2013-01-12T16:03:11.487 に答える
14

公式仕様によると、 ReSTには取り消し線マークアップの指示はありません。

ただし、環境で:raw:ロールが許可されている場合、または独自のロールを作成できる場合は、そのためのカスタムプラグインを作成できます。

于 2011-07-08T18:51:52.243 に答える
5

役割の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>

于 2020-06-21T00:49:06.247 に答える
4

他の答えはとても役に立ちました。私は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の経験では明らかではなかったので、私は単にこの答えを書いています。

于 2013-02-22T11:33:24.480 に答える
3

ユーザーのバックグラウンドが異なる可能性があることを考慮してください。したがって、すべての人に適したソリューションは1つではありません。

1.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のユーザーのために書いています

2.スフィンクスの初心者

あなたがスフィンクスの初心者なら。(つまり、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と、最初の各ファイルに役割を自動追加できますが、コンテンツ(そのファイルには、定義した形式が含まれています)を変更した場合は、レンダリングを正しくするために再構築する必要があります。

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
  • _静的/
    • css /
      • user.define.css

ルールについては、このリンクを参照できますrst-roles

そして、私はあなたが見ることをお勧めしますdocutils.parsers.rst.roles.py

于 2020-05-25T10:12:31.517 に答える
2

私はこれの拡張機能を書きました。
ただpip install sphinxnotes-strike使用してください:

:strike:`text` 

また

:del:`text` 

ストライクテキストを表示します。

詳細については、https ://sphinx-notes.github.io/strike/をご覧ください。

于 2021-02-13T06:51:00.093 に答える
0

Docutils 0.17以降、HTML5ライターは、、、、または要素に<del>一致するクラス値が見つかった場合に使用します。inlineliteralcontainer

.. role:: del

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

.. container:: del

  This paragraph has been deleted.
于 2020-07-14T18:27:50.753 に答える