转换DocBook时,pandoc无法找到图像

时间:2019-11-29 20:18:28

标签: cmake pandoc docbook

我正在编写程序文档,并希望包含屏幕截图。 CMakeLists.txt子目录中的doc文件如下所示:

find_program(PANDOC pandoc)

if (PANDOC)
add_custom_command(OUTPUT perfecttin.pdf MAIN_DEPENDENCY perfecttin.xml COMMAND pandoc -f docbook -o perfecttin.pdf -V papersize=a4 --data-dir=${PROJECT_SOURCE_DIR}/doc ${PROJECT_SOURCE_DIR}/doc/perfecttin.xml)
add_custom_target(perfecttin-doc ALL DEPENDS perfecttin.pdf)
endif ()

DocBook文件的部分如下所示:

<section id="window">
  <title>Main Window</title>
  <mediaobject>
    <imageobject>
      <imagedata fileref="window1.png" format="PNG"/>
    </imageobject>
  </mediaobject>
</section>

window1.pngCMakeLists.txtperfecttin.xml位于同一目录中。我在有和没有--data-dir=${PROJECT_SOURCE_DIR}/doc的情况下都尝试过,但出现相同的错误:

[pandoc warning] Could not find image `window1.png', skipping...

如何告诉pandoc在哪里寻找图片?

1 个答案:

答案 0 :(得分:1)

执行此操作的选项为--resource-path,但在Ubuntu Bionic上的pandoc版本上不可用。因此,为了在较新版本上构建文档,但又不破坏在较旧版本上的整个构建,我添加了代码以检查pandoc是否支持该选项。这是有效的CMakeLists.txt:

find_program(PANDOC pandoc)

if (PANDOC)
execute_process(COMMAND ${PANDOC} "--resource-path=/" INPUT_FILE /dev/null ERROR_FILE /dev/null RESULT_VARIABLE pandoc_exit)
endif ()

if (PANDOC AND NOT pandoc_exit)
add_custom_command(OUTPUT perfecttin.pdf MAIN_DEPENDENCY perfecttin.xml COMMAND pandoc -f docbook -o perfecttin.pdf -V papersize=a4 --resource-path=${PROJECT_SOURCE_DIR}/doc ${PROJECT_SOURCE_DIR}/doc/perfecttin.xml)
add_custom_target(perfecttin-doc ALL DEPENDS perfecttin.pdf)
endif ()

if (PANDOC AND NOT pandoc_exit)听起来很倒,但是成功的退出代码为0,CMake将其视为错误,而错误的代码则为2,将其视为真实。