2016-11-07 42 views
1

我試圖創建一個簡單的宏來呈現文本項目在紅色asciidoctor。 下不起作用:在asciidoctor宏中使用角色?

:redtext: [red]#some important text in red that occurs a lot# 

{redtext} 

或一個更簡單的例子:

:redcross: [red]#✘# 

我不是在規則上明確什麼可以和不能被宏取代。 asciidoctor手冊目前有一個用於宏的空格(http://asciidoctor.org/docs/user-manual/#macros)。 asciidoc手冊(http://www.methods.co.nz/asciidoc/chunked/ch21.html)也不是很清楚,但可能不適用於asciidoctor

一個未解答的問題是Resuable markup fragments with Asciidoctor。 與此相關的一個相關的問題表明使用包括這是過度的。

宏的侷限性是什麼?

回答

0

我覺得包括很好的工作。我們有一個glossary.asciidoc文件包含所有的可重複使用的片段,例如:

tag::redtext[] 
[red]#some important text in red that occurs a lot# 
end::redtext[] 

index.asciidoc您可以添加一個小幫手:

:g: glossary.asciidoc 

那麼無論你需要這個片斷:

include::{g}[tag=redtext] 
+0

這引入了幾個新問題: *包含只能在行的開頭使用 *您的文檔不再是單個源文件 *包含與我想包含的文本幾乎一樣冗長。 –

1

你定義的不是一個宏,它是一個屬性。 (當你使用它時,它被稱爲屬性引用)。

您可以使用inline pass宏在屬性的定義中熱切地執行替換。在目標位置,它接受逗號分隔的替換名稱(或替換字母)列表。

在你的情況,你可以這樣寫:

:redtext: pass:q[[red]#some important text in red that occurs a lot#] 

相關部分是:

pass:q[...] 

詳見substitutions in an attribute entry