私が知る限りcode-block
、reStructuredText 構文に関してあいまいになるため、空白行で開始または終了するリテラル テキスト ブロック (ディレクティブなど) を作成することはできません。
それで大丈夫です。
しかし、今はdocutils
のliteral_block()
ノードを使用するカスタム ディレクティブを作成したいと考えており、(ディレクティブのコード内で) ディレクティブの内容の先頭および/または末尾に空の行を追加したいと考えています。
これは reStructuredText 構文では不可能であるため、ディレクティブのオプションを使用して空白行の数を指定する予定ですが、それは私の問題ではなく、質問の一部でもありません。念のため、疑問に思っています...
これが私がやりたいことの最小限の例です:
import docutils
class MyDirective(docutils.parsers.rst.Directive):
has_content = True
def run(self):
text = '\n\n' + '\n'.join(self.content.data) + '\n\n'
node = docutils.nodes.literal_block(text, text)
print(node)
return [node]
def setup(app):
app.add_directive('mydirective', MyDirective)
次のように使用できます。
.. mydirective::
Hello, world!
これは機能しますが、ディレクティブに追加した改行が何らかの形で Sphinx に飲み込まれます (HTML と LaTeX の両方の出力で)。
どうすればそれを回避できますか?
改行は実際にはnode
オブジェクトに格納されていますが (の出力に見られるようにprint()
)、後で Sphinx の処理中にどこかで失われるようです。
私はスフィンクスの機械について自分でこれを追跡するのに十分な知識がありません。どんな助けでも大歓迎です!