niszetの日記

細かい情報を載せていくブログ

(Pandoc) docx -> md への逆変換のメモ(4回目)

コード周りは一旦これでおしまい。

さて、前回はテンプレートファイルに"Source Code R"のようなスタイルを追加し、CodeBlockはその外側にこのスタイルを持ったDivを配置することで、生成されたdocxの見た目に影響なく、元となった言語情報を保存することをしました。

今度はdocxからmdへ変換する対応です。

これは、Div要素が対応するカスタムスタイルを持っていた場合に、その子要素であるCodeBlockに対して、class情報を与えるということで対応できます。

あれ?Codeじゃないのか?という感じですが、変換した結果わかったのですが、Para+Codeはどこかのタイミングで最適化されてCodeBlockとなります。

この最適化が発生するタイミングによっては今回のこの方法がうまくいかない可能性もあるのですが、とりあえず動いているのでヨシ!として進めます。

コードはこんな感じになります。

function Div(e)
  for k, v in pairs(e.attributes) do
    if k == "custom-style" then
      if string.match(v, "Source Code") then
        local sclang = text.lower(string.gsub(string.gsub(v, "Source Code", ""), " ", ""))
          for k2, v2 in pairs(e.content) do
            if v2.tag == "CodeBlock" then
              if sclang ~= "" then
                v2.classes[1] = sclang
              end
              return(v2)
            end
          end
      end
    end
  end
  return(e)
end

マッチしないDivはそのまま返していますが、上記の条件にマッチした場合はDivを取り払っています。また、素のSource Codeの場合はclassを与えずにそのままCodeBlockを返しています(Divは削除)

これに、下記のコードを実行すれば、

pandoc word.docx -f docx+styles -t markdown+backtick_code_blocks -o word_rev.md -s --atx-headers --wrap=none --extract-media=hoge -L div.lua

結果は、

---
author: niszet
date: 2020/5/20
title: word
---

## R Markdown

::: {custom-style="First Paragraph"}
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see [[http://rmarkdown.rstudio.com]{custom-style="Hyperlink"}](http://rmarkdown.rstudio.com).
:::

::: {custom-style="Body Text"}
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
:::

summary(cars)

    ##      speed           dist       
    ##  Min.   : 4.0   Min.   :  2.00  
    ##  1st Qu.:12.0   1st Qu.: 26.00  
    ##  Median :15.0   Median : 36.00  
    ##  Mean   :15.4   Mean   : 42.98  
    ##  3rd Qu.:19.0   3rd Qu.: 56.00  
    ##  Max.   :25.0   Max.   :120.00

## Including Plots

::: {custom-style="First Paragraph"}
You can also embed plots, for example:
:::

::: {custom-style="Body Text"}
![](hoge/media/rId23.png){width="5.0526312335958in" height="4.0421052055993in"}
:::

::: {custom-style="Body Text"}
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
:::

こんな感じです。割と良い感じではないでしょうか…?まぁ、Indented Code Blockはこのままがいいのか、空のclassかattributesをもたせてbacktickにするべきか?などがありますが…。

しかし、こうしてみるとカスタムスタイルを表示しない方が良いのでは?というサンプルになっていますね…。あるいは、不要なカスタムスタイルは同様にして消してしまうというのもありかもしれませんね。

さて、ひとまずこれでコードブロックに対するdocx -> mdの変換の対応はひとまず終わりです。もう少し込み入ったドキュメントじゃないと困りどころが出てこないかもしれませんね。

さて、画像ファイルの名前の対応をするか、表の対応をするか…。思いついたらやっていきます。

(Pandoc) docx -> md への逆変換のメモ(3回目)

まずはdocxにする際に細工をする。

さて、前回の考察の結果として、docx生成時にCodeBlockの言語情報が失われているので再生しようがないため、docx生成時になんとか情報を残す方法を考えねばならぬことがわかりました。

やろうと思えば色々とデータをdocxファイルに埋め込むことは出来ると思いますが(例えば隠し文字とか)、管理が煩雑になるのは避けたいところです。

そこで、スタイルを言語ごとに変えるという方法で考えてみます。例えばR言語であれば"Source Code R"といった具合です。

そのためにはまずdocxのテンプレートファイル中で対応するスタイルを作っておかねばなりません。これもプログラムを書いて自動化できるはずですが、面倒くさいので今回は手でやります。

テンプレートとして使用するdocxファイルを開き、Source Codeのスタイルの段落にカーソルを置いた状態で新規にスタイルを作成すれば、Source Codeを元にしたスタイルを作れるはずです。 このスタイルの名前を冒頭のように"Source Code R"のように必要な言語の数だけ作っておけばオッケーです。まぁコピペするだけなので4-5言語くらいなら手でやった方が早いでしょう…。

Lua filterの準備

さて、Lua filterで処理を考えます。と言ってもどうやって作るか…?ですが、今回はCodeBlockを囲う形でDivを作ることとしました。CodeBlockにclassがあれば、それを"Source Code "の文字列の後につなげてあげれば、上で作ったカスタムスタイルに対応しますね。

ここでは対応する言語名に対してtext.upper()で大文字に変更しています。

ここで注意しないといけないのがCodeBlockをそのまま残すとスタイルが反映されないということです。おそらくですが、CodeBlockが生成するSource Codeに阻まれる形で、外から囲おうとしているSource Code Rを邪魔しているのではないかと…。

そのため、Codeとして再定義することとしました。ただし、Codeはインライン要素なのでDivにそのまま与えることが出来ません。一旦Paraなどのブロック要素に入れてからDivにしまってあげる必要があります。

さて、これらを反映したLua filterのコードは下記のようになります。

local text = require('text')

function CodeBlock(e)
  for k, v in pairs(e.attr.classes) do
    if v == "r" then
      local val = "Source Code " .. text.upper(v)
      local code = pandoc.Code(e.text, e.attr)
      local div = pandoc.Div({pandoc.Para(code)})
      div.attributes["custom-style"] = val
      return(div)
    end
  end
end

これを使うと、"Source Code R"というカスタムスタイルに囲われたCodeを持つParaを生成できます。

Codeは不要ではとも見えるのですが、これはシンタックスハイライトを効かせるために必要です。フィルタが作用するASTの段階ではまだハイライトは実行されていないので、WriterにはCodeあるいはCodeBlockをわたす必要があります(もちろん、先の理由でCodeBlockではうまくいかないのでCode一択です)

これを反映させてdocxを生成後、Word上で"Source Code R"のスタイルでスタイルが適用されている範囲を選択すれば、意図した箇所に対して適用されていることが分かると思います。

これで、テンプレートファイルの改造は必要なものの、入力ファイルや出力の見た目に影響なく変換できました。

あとはこれに対応する逆変換用のコードを書くだけです。次回に続きます。

(Pandoc) docx -> md への逆変換のメモ(2回目)

CodeBlockまわりが面倒くさい…

さて、前回の続きです。CodeBlock周りの扱いをどうにかしないといけないのですが…長くなりそうなので複数回にまたがる予定です。

前回の記事にも訂正を入れましたが、docxからMarkdownに変換する際、スタイルがSource CodeになっているものはCodeBlockになっていない、というのは間違いで、ちゃんとCodeBlockとなっています。これは、-t native等で変換すれば確認できます。

しかし、backtick_code_blocksが効かないのはなぜかという疑問が残ります。

これは実際にMarkdown Writerのコードを読めばわかります。

github.com

以下、コード引用。。。

blockToMarkdown' opts (CodeBlock attribs str) = return $
  case attribs == nullAttr of
     False | isEnabled Ext_backtick_code_blocks opts ->
          backticks <> attrs <> cr <> literal str <> cr <> backticks <> blankline
           | isEnabled Ext_fenced_code_blocks opts ->
          tildes <> attrs <> cr <> literal str <> cr <> tildes <> blankline
     _ -> nest (writerTabStop opts) (literal str) <> blankline

これを見ると、attributeがnullの場合はisEnabled Ext_backtick_code_blocks optsを見てくれないことがわかりますね。つまり、属性ナシのCodeBlockはindented code blockになるということです。

実際、前回の出力を見てもCodeBlockはインデントされた状態で書かれていましたが、あれが素のCodeBlockとして必要十分ということでした。

なので、docxに再変換するとSourceCodeになります(たとえ-f docx+stylesから変換したmarkdownファイルでなくても)

しかし、rなどの言語の指定がないので素のコードになります。

また、再変換時は最初に変換したときと同じように --highlight-style tango をつけてあげないと仮に言語の指定があっても再生成したdocxと初めに生成したdocxは等価にはなりません。注意。

pandoc word.docx -t markdown+fenced_code_blocks+fenced_code_attributes -o word_nowrap.md -f docx --atx-headers --wrap=none --extract-media=hoge --highlight-style tango

Lua filterの力を借りる。

ということで、docxからは正しくCodeBlockに変換されるけども、docxに生成した時点で言語情報が失われているので生成したmarkdownのCodeBlockはインデントつきのコードブロックになってしまうのでした。

ということは、Pandocデータ構造(Pandoc's AST)に変換されたあと、CodeBlockに対して言語情報を付与すれば、backtickやfenced codeの形に出来そうだということです。

ということで、まずお試しのコードを作ります。こんな感じ。

function CodeBlock(e)
  e.attr = {class ="r"}
  return(e)
end

attrの与え方はマニュアルを参照。

pandoc.org

これをcodeBlock.luaというファイル名にしたとして、markdownへ書き戻し、

pandoc word.docx -t markdown -o word_rev.md -f docx+styles -s --atx-headers --wrap=none --extract-media=hoge -L codeBlock.lua

すると、すべてのCodeBlockにrというclassが付与されます。

---
author: niszet
date: 2020/5/20
title: word
---

## R Markdown

::: {custom-style="First Paragraph"}
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see [[http://rmarkdown.rstudio.com]{custom-style="Hyperlink"}](http://rmarkdown.rstudio.com).
:::

::: {custom-style="Body Text"}
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
:::

::: {custom-style="Source Code"}
\``` {.r}
summary(cars)
\```
:::

::: {custom-style="Source Code"}
\``` {.r}
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00
\```
:::

## Including Plots

::: {custom-style="First Paragraph"}
You can also embed plots, for example:
:::

::: {custom-style="Body Text"}
![](hoge/media/rId23.png){width="5.0526312335958in" height="4.0421052055993in"}
:::

::: {custom-style="Body Text"}
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
:::

あとは再度docxに変換すればよいのです

pandoc -o word_rev.docx -f markdown  word_rev.md -t docx --highlight-style tango

が、この通りやると、元々Rのコードでない部分もあわせてRのコード扱いになってしまい、等価ではなくなります。つまり、一度docxに変換してしまうと元のコードが何だったのか知るすべがないということですね。

なので、これに対応するためには、docx出力時に生成されるCodeBlockに対して細工をしておく必要がありそうです。例えば、スタイルをSource Code hogeのような名前にして、hogeにその言語名を入れるなどです。

ただし今度はdocxから書き戻す際に、Readerはこれを無視するので、Divでcustom-styleがSource Code hogeである場合はCodeBlockにclass hogeを与えたものを生成するようなフィルタが必要となります。

つまり、

  • md -> docx でCodeBlockをDivに置き換えるLF
  • 対応するスタイルを指定したreference.docx
  • docx -> md でDivをCodeBlockに置き換えるLF

の準備が必要…ということになりますね。面倒ではありますが…。docx -> docx をかませる方法もありますが…(スタイルを置き換える処理などはそのまま残りますが...)

ということで、ちょっと手間が増えるのでやるかどうかは不明ですが、一応道筋はみえてきたかなと。

さて、ほかの課題も見ていかねばなので、続きはまたある程度結果がまとまった時に。

(Pandoc) docx -> md への逆変換のメモ(1回目)

可逆にしたい。

さて、塩漬けにしていた課題、PandocでMarkdownからdocxを生成した後、docxからMarkdownに再変換をする話です。

準備

ひとまずRMarkdownから生成することにします。rmarkdownでデフォルトで生成されるテンプレートからとりあえずdocxに変換して逆変換をします。keep_md:trueを指定して、Rmdから生成されたmdは下記のようになります。\ははてな上でコードブロックを書くために必要なので、手元で試すときは消してください。

---
title: "word"
author: "niszet"
date: "2020/5/20"
output: 
  word_document:
    keep_md: true
---



## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:


\```r
summary(cars)
\```

\```
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00
\```

## Including Plots

You can also embed plots, for example:

![](word_files/figure-docx/pressure-1.png)<!-- -->

Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.

この時、実行されているコマンドは下記のとおり。

"C:/Users/niszet/AppData/Local/Pandoc/pandoc" +RTS -K512m -RTS word.utf8.md --to docx --from markdown+autolink_bare_uris+tex_math_single_backslash+smart --output word.docx --highlight-style tango --lua-filter "C:/Users/niszet/Documents/R/win-library/4.0/rmarkdown/rmd/lua/pagebreak.lua" 

さて、生成されたdocxファイルに対して下記のとおり逆変換をかけます。

pandoc word.docx -t markdown -o word_rev.md -f docx+styles -s --atx-headers --wrap=none --extract-media=hoge

結果は下記のとおりになります。

---
author: niszet
date: 2020/5/20
title: word
---

## R Markdown

::: {custom-style="First Paragraph"}
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see [[http://rmarkdown.rstudio.com]{custom-style="Hyperlink"}](http://rmarkdown.rstudio.com).
:::

::: {custom-style="Body Text"}
When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
:::

::: {custom-style="Source Code"}
    summary(cars)
:::

::: {custom-style="Source Code"}
    ##      speed           dist       
    ##  Min.   : 4.0   Min.   :  2.00  
    ##  1st Qu.:12.0   1st Qu.: 26.00  
    ##  Median :15.0   Median : 36.00  
    ##  Mean   :15.4   Mean   : 42.98  
    ##  3rd Qu.:19.0   3rd Qu.: 56.00  
    ##  Max.   :25.0   Max.   :120.00
:::

## Including Plots

::: {custom-style="First Paragraph"}
You can also embed plots, for example:
:::

::: {custom-style="Body Text"}
![](hoge/media/image1.png){width="5.0526312335958in" height="4.0421052055993in"}
:::

::: {custom-style="Body Text"}
Note that the `echo = FALSE` parameter was added to the code chunk to prevent printing of the R code that generated the plot.
:::

色々課題が見えてきますね。ひとつひとつ見ていきます。まずは簡単なモノから。

--atx-headers

Markdownの章や節を示す###ですが、何も指定しない場合は「Setext-style headings」の記法で出力されます。いつもの記法にする場合は --atx-headersをつけます。Markdown Extensionではないだなぁ。あと、-t markdownではなくて-t gfmにするとATXの方になります。これはまたいつか。gfmの場合はdivとspanがhtmlタグになり、-sによるメタデータのとりこみ(後述)が抜けます(要確認)

pandoc.org

-s

-s あるいは --standalone をオプションで付けることで、メタデータ、今回はauthor、date、titleが復活します。生成したdocxを編集して保存すると内部でスタイルidが割り振られなおしますが、これの影響は受けていないようです(色々やって要確認ではあるけども)

pandoc.org

--wrap=none

どこまでもとに戻すか?は考えるべき点ですが、明示的にwrapオプションを指定しない場合は適当なところで折り返しのために改行されます。これを抑制するためには--wrap=noneの指定が必要です。diffを取って確認したい場合は必要ですが、元のmdが改行されていた場合は…?など課題がありそう(未確認)ですね。

pandoc.org

-f docx+styles

docx上で与えられているスタイルの情報を保持するためには +stylesが必須です。これについて考えていきたいです。次回以降。とりあえず思うところは「とても見づらい」ですね…。

また、気づくかと思いますが、summary(cars)については言語情報(r)が消えていて、かつ文字スタイルについては残っていないこともわかります。これは再度docxに変換した際にdocx間で差異が出ることが見て取れますね。また、下記の何も指定しない例を見ればわかる通り、コードブロックに再生されません。これはextensionのbacktick_code_blocksを与えても挙動に変化がないのでdocx Readerとしては「Source Code」スタイルはCodeBlockに割り当てないという挙動なのかもしれません。これも要確認です。

追記と訂正

上記は勘違いでした。これは、インデントされたブロックはCodeBlockになるというPandocの仕様を満たした、れっきとしたコードブロックです。

pandoc.org

これは-t native等で変換すれば確認できます(確認しました)。

ではなぜbacktick_code_blocksを与えても挙動に変化がないのか…?は次回改めて書きます。

--extract-media=hoge

デフォルトではdocxファイル中の画像ファイルが抜き出されません。--extract-media=hogeと指定すると、hogeというディレクトリの下に画像ファイル(正確にはこの中にmediaというディレクトリがつくられ、さらにその下に作られる)が作成されます。

このオプションを知っているだけでも、docxから画像ファイルを抜き出せるのは便利かもしれません。今回、Word上で特にいじっていない状態では作成時のpngファイルと抜き出したpngファイルのMD5チェックサムの値は一致したので、正しくデータが取り出せると思います。

ちなみに、上記の拡張、オプションを何も設定しない場合は下記のようになります。

pandoc word.docx -t markdown -o word_rev0.md -f docx
R Markdown
----------

This is an R Markdown document. Markdown is a simple formatting syntax
for authoring HTML, PDF, and MS Word documents. For more details on
using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that
includes both content as well as the output of any embedded R code
chunks within the document. You can embed an R code chunk like this:

    summary(cars)
    ##      speed           dist       
    ##  Min.   : 4.0   Min.   :  2.00  
    ##  1st Qu.:12.0   1st Qu.: 26.00  
    ##  Median :15.0   Median : 36.00  
    ##  Mean   :15.4   Mean   : 42.98  
    ##  3rd Qu.:19.0   3rd Qu.: 56.00  
    ##  Max.   :25.0   Max.   :120.00

Including Plots
---------------

You can also embed plots, for example:

![](media/rId23.png){width="5.0526312335958in"
height="4.0421052055993in"}

Note that the `echo = FALSE` parameter was added to the code chunk to
prevent printing of the R code that generated the plot.

さて、前途多難感がすでに出てきましたが、やっていきましょう…。

RStudio1.2.5042 + RTools4 の環境でTerminalがおかしくなるIssueが上がっていたのでメモ。

1.3で対応するらしい?

自分の環境でもR4.0.0+RStudio1.2.5042+RTools4でTerminalに変なメッセージが出ていたので検索したらIssueに上がっているこれが関連していそう。完全一致じゃないけど、これがfixすればまぁ多分大丈夫ではないかなと。

github.com

反映されたものの安定リリースは先になりそうなので、我慢するか開発版を使うか…。

プログラミングTypeScriptを読んだのでその記録

レベル不足で一部未読だがとりあえず1周したので。

ちょっと時間が経ってしまったけど、プログラミングTypeScriptを読み終わったのでその記録。

www.oreilly.co.jp

良くも悪くも?オライリーの本なので、訳は読みやすく、入門から始まったと見せかけて最終的にはかなり高度な話になるいつものやつですね。5章までは他の言語(できれば型つきの言語…)の経験があればそんなに難しくないのでは?と思います。6章 高度な型は私には難しすぎた…。

あと、8章 非同期プログラミングと並行、並列処理はPromise/async/awaitの話なのでJavaScriptがわからないとよくわからないので注意か。結局型がついたとはいえ基本はJavaScriptなので、そちらの知識が必要な場合は別途JSの本なりマニュアルなりを読んでいかないといけないですね。

あと、9章以降は現時点では理解できなさそうなのと、9章のReactの話もまた別途本を読んだ方が良いということでここで一旦終了としました。

自分はあくまでVSCodeで動かす拡張が作れれば良いのでその範囲で必要なTS/JSの知識だけがあれば当面良いのですが、結局はJSの仕様は一度全部さらっておいた方が良いのかなと思っています(なので別途本を買ってきたのでいずれ読みます)JSを一周したらまた戻って適宜読み足していきたいです。

逆にJSについては一通り押さえている人にとってはこの本はTypeScriptの習得に必要十分な情報が含まれているのではと思うので、おススメして良さそうです。

RStudioから日本語入りpdfを作る云々の作業履歴。

よくわからんけど動いた!

(La)TeXに入門しようと思って、[改訂第7版]LaTeX2ε美文書作成入門を買ってきました。

gihyo.jp

とりあえず読み進めています。環境構築がほぼ何も考えずにTeXLiveでOKなので楽な時代なんだろうな…と思っています(niszetは(La)TeXのことをよく知らないし、2年くらい前に触ったときもTeXLiveなのでそれ以前を知らない)

3年に一度?のペースで更新しているらしいので、今年出るのでは…買うのは時期が悪いのでは…と後で思いましたが必要な時に買わないでいつ買うんでしょうかね…。(なお、本当に今必要なのかはよくわからない)

texwiki.texjp.org

とりあえず十分な時間待てば完了するので、その間に本を読んでました。

一方、(La)TeX界隈はLuaLaTeXが人気だそうで。2019のアドカレにも書いてある。

adventar.org

なので、LuaLaTeXを使っていこうと思ったのですが、ちょっとハマったので自分のためにメモです。日本語を含む文書で無駄に時間を溶かさないように…。

LuaLaTeXから始めるTeX…の道はなんか険しそうですが、何もわからんので逆に良さそう。

ドキュメントクラス

まずはじめにはまったのがコレ。 美文書は(u)pLaTeXの使用を前提としているので、LuaLaTeXを使う場合は注意。LuaTeX-jaのページによると、

texwiki.texjp.org

使用可能なドキュメントクラスは ltjarticle, ltjsarticle, bxjsarticle, beamer などがあります. (u)jarticle や jsarticle などの (e-)(u)pTeX の使用を前提としたものは使用できません.

とのこと。とりあえずは頭にltってつけると対応するドキュメントクラスがありそう。ただ、後述のとおりこれらは使わないことにしたです。

エラーメッセージ読んでも全然わからん…ってなるのがツライ。あと場合によってエラーなく変換されるけど日本語部分が全部消えているってのもツライ…。

こういうエラーが出たりする。(pdflatexではなく)lualatex指定しているのになぁ…となる場合はドキュメントクラスを疑うべき。

texwiki.texjp.org

RMarkdownと組み合わせるとちょっとつらい。

2018年のAtusyさんの記事がこちらにあるので、大体これを読めばよいのですが、私は上に書いた通りLuaLaTeXを使うniszetなので、ここを参考にしつつ、LuaLaTeXを使っていくのでした。

qiita.com

rmarkdown::pdf_documentのマニュアルを読むと、latex_engineの取れる値は3つ。

LaTeX engine for producing PDF output. Options are "pdflatex", "lualatex", and "xelatex".

なのでpLaTeXとかはそもそも選択できないのである…。

rmarkdown.rstudio.com

まぁそもそも、Pandocのオプションにもplatexはないんだけどね…。rmarkdownが上記3つのengineにしか対応していないのは謎です。

pandoc.org

色々さがしていく…

ひとまず変換できるところまで行った。このとき、RmdファイルのYAML部分は以下のようになっている。

これで問題なく日本語の文字が入っていても変換できる。

output: 
  pdf_document:
    latex_engine: lualatex
documentclass: ltjsarticle

しかし、出力に大量の警告メッセージ…

警告メッセージ: Package microtype Warning: Could not parse font size 10\jsc@mpt ' (microtype) in font setbasicmath' on input line 74.

気になって検索すると、BXjscls パッケージのマニュアル(正確にはソースコード説明書)が見つかった。

http://ctan.math.washington.edu/tex-archive/language/japanese/BX/bxjscls/bxjscls.pdf

作者の人、どこかで見た名前だ…と思いつつ検索すると、TeX wikiにも記載がある(そらそうだ)

texwiki.texjp.org

よさそうなのでこちらに乗り換える。TeX Liveに含まれているらしいので、そのまま使える。

先のYAMLdocumentclass: bxjsarticle と指定するが日本語部分が消えている。

Wikiによればja=standardの指定が必要とのこと。しかしこれだけ設定してもエラー。ドキュメントクラスの指定が必要とのこと。

結局、下記のように指定するのが正しいようだ。

output: 
  pdf_document:
    latex_engine: lualatex
documentclass: bixjsarticle
classoption: lualatex, ja=standard

これでいい感じにLuaLaTeXで日本語を含んだ文書作成が出来そう。

しかし、ビルド(とは呼ばないらしいが)がすごい遅い気がするんだけど…。リアルタイムプレビューとかは難しそうですね…。