プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2024/09/26

Asciidoc で include ディレクティブを使用している場合の画像へのパス

update2024/12/25 event_note2024/09/25 23:10

画像を読み込んでいるファイルを、別の階層にあるファイルから include ディレクティブで読み込むと、相対パスの位置が変わってしまいます。

画像を読み込んでいるファイルを単体で表示したときにはそのファイルからの相対パスになりますが、include しているファイルを表示したときには、include しているファイルからの相対パスになってしまいます。

同様のことで悩んでいる方はそれなりにいるようで、実際私もかなり困っています。

とりあえずの解決方法としては、私にとっては以下の方法が一番役に立ちました。

ちょっと手間ですが、include 直前で imagedir を都度セットします。

:imagesdir: hoge
include::hoge/included_file.adoc

ただし、多重で include している場合は上記では上手くいきません。
この場合は、試行錯誤の結果、以下のようにすることで上手くいきました。

ifdef::imagesdir[:imagesdir: {imagesdir}/hoge]
ifndef::imagesdir[:imagesdir: hoge]

include::hoge/included_file.adoc

imagesdir が既に定義されている(=別のファイルから include されている)場合は、現在の imagesdir に付加する形で imagesdir を再定義します。
imagesdir が定義されていない(=別のファイルから include されていない)場合は、前述と同じように imagesdir を定義します。