鉄馬の工具箱

te2uma(てつうま)のブログです。調べ物のメモなどを共有します。

このエントリーをはてなブックマークに追加

Tinkererでソースコードをハイライト表示する

Tinkererをインストールすると、Sphinxとともにシンタックスハイライターの「 Pygments 」が組み込まれるので、既定のreStructuredText(以下、reST)の書き方に従えば、自動的にソースコードがハイライト表示されます。

記述方法は「 Pygments による コードハイライト表示 」が参考になります。

具体的には、まずソースコード部分をreSTの「 リテラルブロック 」に指定します。これには直前の段落末尾に「::」(コロン2連続)を書けばよいです。

次のように「::」単独で記述する場合と、「::」の前に文章がある場合とで挙動が異なり、前者はレンダリング時に非表示になり、後者は「:」と一つだけコロンが残ります。これは、日本ではあまりなじみがありませんが 英語独特の用法 に由来するものだと思われます。通常は前者を使っておけばよいです。

::

(ソースコード)
例えば次のように記述します::

(ソースコード)

次に、対象のリテラルブロックより前に

.. highlight:: c

のような「highlightディレクティブ」という指定を行うと、以降のリテラルブロックがすべてハイライト表示されるようになります。これは一度書くだけで、次のhighlightディレクティブで設定が上書きされるまで有効です。

.. sourcecode:: c

「c」の部分はプログラミング言語の指定で、ここではC言語を選択しています。同様に「bash」「python」「html」など、さまざまなものが指定できます。

サポートしている言語は公式ページの「 Supported languages 」に列挙されており、「highlight::」の後に指定するキーワードは、「 Available lexers 」に記載されている各言語の「Short names:」を指定すればよさそうです(明確な文献が見当たらなかった)。

また、次のようなcode-blockディレクティブを代わりに使うことで、部分的にプログラミング言語を指定できます。エイリアスの「sourcecode」でもOKです。

.. code-block:: python

これは直後のリテラルブロックだけに対して有効になるようです。その後の設定は、直前のものが適用されます。ソースコードの種類が混在する場合に便利。

【追記】なお、code-blockを使うときは、これ自体が次にリテラルブロックが来ることを意味しているようで、直前の「::」は不要なようです(入れると重複しておかしくなる)。

イメージとしてはこんな感じ:

段落1。

.. highlight:: python

::

(Pythonのコード)

段落2。

::

(Pythonのコード)

.. code-block:: html

(HTMLのコード/↑直前に「::」が入らない)

::

(Pythonのコード)

行番号の表示といったその他のノウハウは、sphinx-users.jpのページ などを参照のこと。

ちなみに、デフォルトだとハイライト部分の文字がとても小さくなるので、CSSをカスタマイズする必要がありそうです。

(最終更新日:2013/07/08)

修正履歴

  • 2013/07/08: 誤)「sourcecode」が「highlight」のエイリアス、正)「code-block」のエイリアス。
このエントリーをはてなブックマークに追加