AsciiDoc支持多个内联直通宏。
内联直通宏
- 单加和双加
-
一种用于防止行内文本被格式化的特殊语法。输出格式中只替换了特殊字符。这种通过类型的替代不能被修改。
- 三重加号
-
一种用于指定直通内容的特殊内联语法。不应用任何替换,也不能使用步骤和组替换值来添加替换。
- 内联传递宏
-
一个名为`pass`的内联宏,可用于直通内容。您可以使用替换类型和组对宏的目标应用特定的替换。
pass:[content like #{variable} passed directly to the output] followed by normal content. 应用了仅限选择的替换的内容:pass:c,a[__<{email}>__]
Tip
|
当您需要防止或控制一个或多个内容块的替换时,请使用一个限定的通行块(delimited passthrough block)或通行块样式(pass block style)。 |
单加和双加
单个加号和双加号通过机制可以防止用一对单个加号(+
)或一对双加号(++
)包围的文本被格式化。
一个+word+,一个+sequence of words+,或者++char++acters,它们从格式化中逃脱了。
单个加号和双加号分别代表受限和非受限的直通。它们有与受限和非受限格式化标记匹配的边界。然而,主要的区别在于它们首先被应用来抑制格式化。
这种透传旨在抑制源文本本身的任何特殊含义。然而,这种透传类型仍然确保内容在输出中得到正确的转义。这意味着仍然会应用特殊字符替换。
像所有受限的配对一样,单个加号直通旨在用于包围一个词或短语。
单个加号之间的单词或短语,例如 +/document/{id}+,不会被替换。 然而,特殊字符 +<+ 和 +>+ 在输出时仍然会被转义。 你也可以转义格式标记,比如 +``+。
作为一个不受约束的对,双加号通过可以在文本的任何位置使用。
如果链接目标被双加号包围,则不会对其应用文本格式化。 例如,link:++https://example.org/now_this__link_works.html++[]。 你也可以避免格式化标记,就像全天然++*++一样。 一个单词中的属性引用,比如 dev++{conf}++,不会被替换。
单引号和加号穿透是替代反斜杠除转义的可靠选择。
注意,单个和加号通道仅阻止替换。它们不会将文本格式化为等宽字体。如果您想同时进行阻止替换和格式化为等宽字体,您必须将这对文本包含在一个等宽格式对中,这称为文字等宽。
三重加号
三重加号穿越(+++)将内容包裹其中,可使该内容不受任何替换操作的影响。
content passed directly to the output followed by normal content.
triple plus 宏经常被用来输出自定义的HTML或XML。
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=3p]
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=3p]
内联传递宏
就像其他的内联直通一样,内联直通宏可以用来控制对一段文本应用的替换。要将内联内容排除在所有替换之外,请将其封闭在内联直通宏中。
这是在从AsciiDoc生成HTML时将文本格式化为下划线的一种方法:
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=in-macro]
这就是结果。
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=in-macro]
Warning
|
直接使用穿透传送内容到输出可以将你的内容与特定的输出格式(例如HTML)耦合在一起。为了避免这种风险,你应该考虑使用条件预处理指令,根据当前的后端选择不同输出格式的内容。 |
与其他选项不同,内联传递宏独特之处在于它允许自定义替换。内联传递宏在文档头部也扮演着至关重要的角色。事实上,它是默认作为标题替换组的一部分在文档头部被处理的唯一宏(尽管它也可以用于启用其他替换,正如本节所示)。
让我们看看如何使用内联pass宏来手动选择替换。
自定义替换
您可以通过在内联pass宏的目标中指定一个或多个替换值来自定义应用于宏内容的替换。多个值必须用逗号分隔,且不得包含任何空格。替换值要么是替代类型或组的正式名称,要么是它的简写。
下表列出了允许的替代值:
速记 | 替代类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
速记 |
替代群组 |
|
|
|
|
例如,引号替换(即 q
或 quotes
)可以在内联直通宏中如下启用:
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=in-macro-sub]
这是结果。
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=in-macro-sub]
要启用多个替换组,用逗号分隔宏目标中的每个值:
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=in-macro-subs]
这是结果。
Unresolved directive in pass-macro.adoc - include::example$pass.adoc[tag=in-macro-subs]
嵌套块和直通
当您在文字和列表块内使用直通时,很容易忘记单加号和三加号直通是宏替换。要启用直通,将 macros
值赋给 subs
属性。
[source,java,subs="+quotes,+macros"] ---- protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() **.antMatchers("/resources/+++**+++").permitAll()** .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll(); ----
要了解更多关于对块应用替换的信息,请参阅subs:apply-subs-to-blocks.html。
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll();