9

私が書いているいくつかのスフィンクス ドキュメントでは、次のような補助ファイルからのコード サンプルを含めています。

.. literalinclude:: mymodule.py
   :pyobject: MyClass
   :linenos:

この特定のドキュメントは、クラスが段階的に構築されるチュートリアルです。私がやりたいのは、クラス全体または単一のメソッドを含めて、そのセクションの関心のある行だけを強調することです。こうすることで、コンテキストは保持されますが、興味深い部分は一目でわかります。今のところ、テキスト内の行番号を参照することに頼っています。これは問題ありませんが、理想からはほど遠いものです。

スフィンクスとピグメントのドキュメントとコードを見ると、これを行う明白な方法が見つかりません。私はそれらにパッチを当てたり、で何かトリッキーなことをすることに反対していませんがconf.py、誰かがこれを解決したかどうか疑問に思いました.

4

2 に答える 2

7

Sphinx には、emphasize-linesリテラル インクルードのディレクティブが追加されました。

http://sphinx-doc.org/markup/code.html#includes

于 2012-04-17T20:26:44.447 に答える
2

sphinx / direction/code.pyでsphinxのLiteralIncludeディレクティブにパッチを適用できます

  • そこで、コードを含めるときに、このスニペットで強調する開始/終了行を指定できるようにする必要があります。
  • 2番目のステップでは、物事を異なる方法で強調する方法をいくつか作成する必要があります。最も単純なアプローチは、強調されていない部分は強調表示されず、強調されている部分が強調表示されることです。これにより、スタイルやハイライトのより複雑なハッキングを回避できます。

これにより、たとえば、literalincludeディレクティブに次のように使用できる新しい行強調オプションが提供されます。

.. literalinclude:: ../sphinx/directives/code.py
   :pyobject: Highlight
   :lines-emphasis: 6,13

ここで、line-emphasisは開始行、含まれているコードを基準にした終了行、最初の行は1です。

pypi.python.org/pypi/Sphinx/0.6.5のsphinx0.6.5をベースとして使用すると、パッチが適用された迅速なcode.pyがあります:http://paste.pocoo.org/show/194456/

以下は同等であることに注意してください。

標準のスフィンクスを使用する(S.Lottが提案したものとほぼ同じ):

.. literalinclude:: ../sphinx/directives/code.py
   :language: none
   :lines: 0-36
.. literalinclude:: ../sphinx/directives/code.py
   :lines: 36-46
.. literalinclude:: ../sphinx/directives/code.py
   :language: none
   :lines: 37-

...そしてパッチを当てたスフィンクスを使用する:

.. literalinclude:: ../sphinx/directives/code.py
   :lines-emphasis: 37,47

したがって、それはあなたが探しているものと正確に一致しないかもしれません。パッチは、コードの強調表示されたセクションまたは強調表示されていないセクションごとに新しいノードを作成します。これらはそれぞれ、Sphinxによって個別の<div>セクションと<pre>セクションとしてレンダリングされます。これを超えるには、強調して線をより適切に抜粋するスタイルシートを作成することをお勧めします。さらにハックするには、SphinxとPygmentsの内臓を深く掘り下げて、シームレスで強調されたスタイルを直接生成する必要があります。些細なことではありません。

/ HTH

于 2010-03-27T14:29:30.577 に答える