niszetの日記

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

(Pandoc) csvを取り込む表にcaptionをつけてみる

昨日のつづき

caption付けられるようになりますか?ということで、出来ました。

あと、Pandoc 側で用意されていたList用の関数に一部置き換えています(コメントアウトしているところが以前の記述)

入力ファイルはこんな感じ。Div記法にcaption=キャプション文字列を追加しただけです。それ以外は前回と同じなので説明を割愛。

# Test

This is a test document for including csv as a table format by using Div and lua filter.

::: {.csv file=iris.csv caption="This is a Iris table"}
This is dummy text
::: 

これを処理するコードは以下のようになります。

function Div(e)
  if e.attr.classes:includes("csv", 1) then
  -- if e.attr.classes[1] == "csv" then
    filename = e.attr.attributes.file
    local f = assert(io.open(filename, "r"))
    local t = f:read("*all")
    f:close()
    local document = pandoc.read(t, "csv")
    pandoc_table = document.blocks[1]
    if e.attr.attributes["caption"] ~= nil then
      --pandoc_table.caption.insert(pandoc_table.caption, pandoc.Str(e.attr.attributes.caption))
      pandoc_table.caption:insert(pandoc.Str(e.attr.attributes.caption))
    end
    return(pandoc_table)
  end

Tableはちょっとデータ構造が複雑なので厄介ですが、基本的にはLuaのtableの操作なので慣れてくるとそんなに難しくないかなと。captionの文字列は途中に空白文字が入る場合は全体を""で囲ってあげましょう(これは普通の場合もそう)

出力結果はこんな感じになりました。ちゃんとcaptionがついていますね。良かったよかった。

f:id:niszet:20200223110148p:plain