niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

indented codeに行番号をつける

偶然見つけたので書いておく。

atusyさんのこの記事に関連して。

blog.atusy.net

Rのchunk内ではattributesを渡せない…?

前回書いた内容はMarkdownのfenced codeなどのcode系の記法が行番号を扱えるかどうか?の確認であって、Rのコードブロックで取り扱えるものではなかった。これは、Rのコードを実行後、その生成物をMarkdownに埋め込む処理をR/knitr/rmarkdownが対応しているが、コードの表示を行う('echo=True`)ようにしても、チャンクオプションとして与えられるのはclassのみだからであった。

今まで調べた範囲では、チャンクオプションとしてclassは与えられるものの、startFrom=10のような属性(attr)は与えられないようである。

もう少しコードも含めて調べてみるが望みは薄い。

属性をclassとして無理やり渡すことは出来るが、markdownをPandocに与える前に対応する必要がある。具体的には.startFrom=10というclassで与えられるので、これから.をとればよい。これはluaのfilterで対応できる(class名に=があった場合、先頭の.を取る、という方法で)

もちろんこれはpost knitのタイミングで対応しても良い。いずれにしてもPandocに渡す前に対応する必要がある。

一方で、Pandocはインデントされたコードブロックに対して、クラスを与えることが出来る。下記の、

--indented-code-classes=CLASSES

を与えればよい。具体的には、

output: 
  html_document:
    pandoc_args: 
      - --indented-code-classes
      - numberLines
    highlight: tango

とすることで、インデントされたコードブロックにnumberLinesというclassが与えられ、このclassを持ったコードブロックはhighlightが有効になっている場合は行番号が付与される。

ということを見つけたのだが、肝心のRの実行コードに対する行番号付与(正確には行番号の先頭の数字の付与)はこの方法では対応できないのであった。

使う場面があるのか不明なのだが、見つけたのでメモしておく。

Enjoy!!