質問: 現状の問題 ----- Pandocを利用してMarkdownで書かれたファイルをPDFに変換しようとしています。 現在、Markdownのファイルは下記のようなフォルダ構成で配置しています。 ``` root/ +- images/ +- test.png +- docs/ +- doc1.md ``` doc1.mdのファイル内容は下記のようになっています。 ``` # テストドキュメント !テストイメージ ``` 上記のような構成で、rootフォルダ上で下記のコマンドを実行します。 ``` pandoc docs/doc1.md -o doc1.pdf -V documentclass=ltjarticle --latex-engine=lualatex ``` すると、下記のエラーが発生してしまいます。 ``` pandoc.exe: Could not find image `../images/test.png', skipping... ``` イメージのパスを`./images/test.png`とすれば正常に出力されることはわかっているのですが、doc1.mdはHTMLとしても表示したいため、doc1.mdファイル内のイメージへのパスを書き換えることなくPDFへの出力を実現したいと考えています。 当初はimagesフォルダをrootフォルダと同階層にコピーして実行することで解消していましたが、docsフォルダ内をさらにサブフォルダに分割したところ、imagesフォルダへの相対パスが深くなってしまったため、imagesフォルダのコピーでは手順が面倒になってしまった次第です。 知りたいこと ------ * Pandocでの生成時にドキュメントベースを指定できるようなオプションはないでしょうか? * MarkdownからPDFへの変換は一度Latexにされるのですが、Latexのオプションでドキュメントベースを指定できるようなオプションはないでしょうか? * Markdownファイル内の記述についてHTMLでも利用可能な共通的なパスの指定方法はありませんか? * その他こうしたほうが良いなど
回答: > > Pandocでの生成時にドキュメントベースを指定できるようなオプションはないでしょうか? > > > こちら Request for change: adding optione to define basepath・Issue #785 を読む限りでは、 ``` $ (cd docs && pandoc doc1.md -o ../doc1.pdf -V documentclass=ltjarticle --latex-engine=lualatex) ``` などとするしかない様です。 その他には pandoc の `--filter` オプションを使う方法があります。 **filter.sh** ``` #!/bin/sh sed -r 's:(../)+images/:./images/:g' ``` pandoc の内部では JSON 形式に変換したデータを扱っていますので `jq` コマンドなどを使うべきなのですが、ここでは簡便に `sed` コマンドを利用します。 ``` $ pandoc docs/doc1.md --filter='./filter.sh' -o doc1.pdf -V documentclass=ltjarticle --latex-engine=lualatex ``` ただ、ご質問には `pandoc.exe` とありますので、Windows 環境で上記の処理が実行可能かどうかは不明です。