在 asciidoc 中,如何只为生成 pdf 执行宏?

In asciidoc how do I execute a macro only for pdf generation?

在 asciidoc 中有一张图片,我只想将其包含在 PDF 输出中。是否有一种我可以传递给 image:: 的属性,以便为 PDF 生成处理图像,并在生成 epub 等时忽略图像?或者更可能是通过使用 ifdef,但究竟如何?

您可以这样使用 ifdef directive

Some text for all outputs.

ifdef::backend-pdf[]
This is only displayed in the PDF document, you can use image:
image::mypict.png[]
endif::[]

如果你需要一个简单的小型解决方案,我更喜欢 Jminis 答案。

对于需要更多区分的情况,您可以为不同类型的输出定义自己的过滤器参数,这些参数可以在命令行调用中定义为参数。您可以按如下方式过滤您的内容,例如如果你也想在不同的观众之间有所不同。

Some text for all outputs.

ifeval::["{myfilter1}"=="pdf"]
  This content is pdf-only!

  ifeval::["{myfilter2}"=="adminpdf"]
    This content is admin-pdf-only!
  endif::[]
endif::[]

您可以在命令行调用中添加参数如下:

--attribute myfilter1='pdf'

命令的确切表达取决于您的系统。以下语法可以工作(我目前无法在没有 asciidoc-setup 的情况下对其进行测试)。

OS X asciidoc -> 文档:

SCRIPT=${...path to asciidoc installation...}/asciidoc.py
INPUT=myAsciidocInput.ad
OUTPUT=MyDocBookOutput.xml
MYFILTER="--attribute myfilter1='pdf' --attribute myfilter2='adminpdf'"
python "$SCRIPT" -o "$OUTPUT" "$MYFILTER "$INPUT"

WIN asciidoc -> 文档:

set SCRIPT=%{...path to asciidoc installation...}%\asciidoc.py
set INPUT=myAsciidocInput.ad
set OUTPUT=MyDocBookOutput.xml
set MYFILTER=--attribute myfilter1='pdf' --attribute myfilter2='adminpdf'
python "%SCRIPT%" -o "%OUTPUT%"