ifdef 指令

如果指定的属性被设置了,ifdefendif 指令之间的内容就会被包含进来。

ifdef example
ifdef::env-github[]
This content is for GitHub only.
endif::[]

start指令的语法是 ifdef::<attribute>[],其中`<attribute>`是属性的名称。

请记住,内容不仅限于单行。您可以在`ifdef`和`endif`指令之间拥有任意数量的内容。

如果你在`ifdef`指令内有大量内容,你可能会发现使用长格式版本的指令更加易读,在该版本中,属性(也就是条件)在`endif`指令中再次被引用。

如果定义了长格式示例
ifdef::env-github[]
This content is for GitHub only.

这一部分的内容太多了,如果没有闭合的`ifdef`指令,我读源码都会感到困惑。

对于短代码块来说,这并不是必要的,但如果你是有条件地包含一个部分,这可能是值得考虑的事情。

如果你不注意,当其他阅读者审阅你的文档源代码时,他们可能会因为阅读你的源文档而感到目眩。
endif::env-github[]

如果你只处理单行文本,可以将内容直接放入方括号内,并省略`endif`指令。

ifdef 单行示例
ifdef::revnumber[This document has a version number of {revnumber}.]

上面的单行块等同于这个正式的`ifdef`指令:

ifdef::revnumber[]
This document has a version number of {revnumber}.
endif::[]

如果没有定义指令

ifndef` 是 ifdef 的逻辑相反。如果指定的属性 设置,则只有在 ifndefendif 之间的内容才会被包含进来。

ifndef example
ifndef::env-github[]
This content is not shown on GitHub.
endif::[]

start指令的语法是`ifndef::< attribute >[],其中< attribute >`是属性的名称。

ifndef` 指令支持与 ifdef 相同的单行和长形式变体。

检查多个属性

ifdef` 和 ifndef 指令都接受多个属性名。组合符可以是“and”或者“or”。两个组合符不能在同一个表达式中混合使用。

包含多个属性的条件编译指令

如果任何属性被设置(或者)

属性名必须用逗号(,)分隔。如果设置了一个或多个属性,内容将被包含。否则,内容不包含。

如果任何属性示例
ifdef::backend-html5,backend-docbook5[Only shown if converting to HTML (backend-html5 is set) or DocBook (backend-docbook5 is set).]
如果所有属性都已设置(并且)

多个属性名称必须用加号(+)分隔。如果所有属性都被设置,内容就会被包含进来。否则,内容不会被包含。

如果所有属性示例
ifdef::backend-html5+env-github[Only shown when converting to HTML (backend-html5 is set) on GitHub (env-github is set).]

如果没有定义多个属性

ifndef` 指令否定了表达式的结果。使用 ifndef 指令时,应该用“除非”作为前缀来读这个表达式。

除非设置了任何属性(或者)

多个属性名称必须用逗号(,)分隔。如果一个或多个属性已设置,则不包含内容。否则,将包含内容。

除非任何属性的例子
ifndef::profile-production,env-site[Not shown if profile-production or env-site is set.]
除非所有属性都被设置(并且)

多个属性名称必须用加号(+)分隔。如果所有的属性都设置了,内容就不包括在内。否则,内容将被包括进来。

除非所有属性示例
ifndef::profile-staging+env-site[Not shown if profile-staging and env-site are set.]