Home About Contact
Markdown , ICML , Pandoc , InDesign

pandoc を使って markdown を ICML にする場合の画像の大きさ指定

今 ExtendScript を使って markdown テキストを InDeisgn 文書に変換する方法を考えている。 その際に画像の大きさの扱い方で悩んでいたのだが、 pandoc で ICML を経由して markdown を InDesign にする場合は、 markdown で次のようにそれを指定できるらしい。

![wave](./imgs/wave.pdf){ width=50mm }

width だけでなく height 指定もできる。 詳しくは pandoc MANUALAttributes can be set on links and images: を参照。

試しに こんな markdown テキストを InDesign 文書に変換してみた。

Hello, ![wave 4mm](./imgs/wave-h-4mm.pdf) World!

![wave](./imgs/wave.pdf){ width=50mm }

結果はこれ:

InDesign

やってみると { 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" />

のように、ItemTransform1 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 MANUALUsing 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に反映されないようだ。