如何在Asciidoc中传递不同属性引入片段且消除空行?
Asciidoc引入片段传递属性且无空行实现方案
问题描述
我有一个名为hello_world.adoc的Asciidoc片段,内容如下:
Hello {lang} World!
我希望引入该片段时替换{lang}属性,目前通过以下方式实现了属性替换:
:lang: Java include::partial$hello_world.adoc[] :lang: PHP include::partial$hello_world.adoc[]
但这样会在两个引入结果之间产生空行,得到如下输出:
Hello Java World! Hello PHP World!
我期望的输出是:
Hello Java World!Hello PHP World!
我尝试直接在引入时传递属性:
include::partial$hello_world.adoc[lang=Java] include::partial$hello_world.adoc[lang=PHP]
但该方式无效。请问如何实现传递不同属性引入片段且不产生空行?
解决方案
方法1:带属性传递的无换行引入
Asciidoc的include指令支持通过passattrs参数传递局部属性,搭配nowrap参数避免自动换行,具体写法如下:
include::partial$hello_world.adoc[passattrs=lang, lang=Java, nowrap]include::partial$hello_world.adoc[passattrs=lang, lang=PHP, nowrap]
passattrs=lang:指定要传递给片段的属性名称lang=Java/PHP:设置当前引入的属性值nowrap:禁止Asciidoc为引入内容添加自动换行
方法2:行内宏封装(无需额外片段文件)
如果不需要单独的片段文件,可直接定义行内宏实现属性替换,写法更简洁:
:hello-world: pass::[Hello {0} World!] {hello-world:Java}{hello-world:PHP}
这里{0}是宏的参数占位符,调用时直接传入属性值即可,天然支持无换行拼接。
方法3:同属性定义+同引入行(可读性较差)
若坚持使用全局属性定义方式,可将属性设置与引入写在同一行,同时确保片段文件末尾无换行:
- 确保
hello_world.adoc内容末尾没有换行符 - 编写引入代码:
:lang: Java include::partial$hello_world.adoc[] :lang: PHP include::partial$hello_world.adoc[]
这种方式虽然能实现效果,但代码可读性低,不推荐用于复杂场景。
内容的提问来源于stack exchange,提问作者Panos Bariamis
相关产品推荐
相关产品推荐

