今 ExtendScript を使って markdown テキストを InDeisgn 文書に変換する方法を考えている。 その際に画像の大きさの扱い方で悩んでいたのだが、 pandoc で ICML を経由して markdown を InDesign にする場合は、 markdown で次のようにそれを指定できるらしい。
![wave](./imgs/wave.pdf){ width=50mm }
width だけでなく height 指定もできる。 詳しくは pandoc MANUAL の Attributes can be set on links and images: を参照。
試しに こんな markdown テキストを InDesign 文書に変換してみた。
Hello, ![wave 4mm](./imgs/wave-h-4mm.pdf) World!
![wave](./imgs/wave.pdf){ width=50mm }
結果はこれ:
やってみると { width=50mm } というオプションを入れることで、幅が 50mm に変換できた。 pandoc側で PDFの元の大きさを取得して適切にスケール指定されている。
生成された ICML をこの指定を入れない場合とで比較してみると:
93c93
< <Rectangle Self="uec" StrokeWeight="0" ItemTransform="1 0 0 1 144 -115">
---
> <Rectangle Self="uec" StrokeWeight="0" ItemTransform="0.49213 0 0 0.49213 144 -115">
106c106
< <Image Self="ue6" ItemTransform="1 0 0 1 -144 -115">
---
> <Image Self="ue6" ItemTransform="0.49213 0 0 0.49213 -144 -115">
111c111
< <GraphicBounds Left="0" Top="0" Right="288" Bottom="230" />
---
> <GraphicBounds Left="0" Top="0" Right="585.216" Bottom="467.36" />
のように、ItemTransform が 1 0 0 1 -144 -115 から 0.49213 0 0 0.49213 -144 -115 に変化している。 つまり、スケール(scaleX, scaleY)が 1倍から 0.49213 倍に変化している。 そして、画像枠(GraphicBounds) も大きさも Right, Bottom 値が それぞれ 変化している。
なお使用した pandoc のバージョン:
$ pandoc --version
pandoc 2.17.1.1
Compiled with pandoc-types 1.22.1, texmath 0.12.4, skylighting 0.12.3,
citeproc 0.6.0.1, ipynb 0.2, hslua 2.2.0
hello-world.md を result.icml にする変換は:
$ pandoc hello-world.md -s -o result.icml
ちなみに -s は --standalone オプションで、単独で成り立つドキュメントを生成するかどうかの指定。 付けないと ICMLの断片だけ出るのでそのまま InDesign にインポートできない(たぶん)。
pandoc MANUAL の Using pandoc のセクションを参照:
By default, pandoc produces a document fragment. To produce a standalone document (e.g. a valid HTML file including <head> and <body>), use the -s or --standalone flag.
以上です。
HTMLで直に画像の幅を指定する方法も試してみたが、うまくいかない。
これを:
![wave](./imgs/wave.pdf){ width=50mm }
これに:
<img src="./imgs/wave.pdf" alt="wave" style="width: 50mm;"/>
この場合、変換してもこの部分がICMLに反映されないようだ。